inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap

Post Detail 페이지 테스트 코드 작성하기

view on site 가 제대로 동작을 안합니다

392

sonagi

작성한 질문수 6

0

테스트 포스트의 pk는 7이고 그거 하나 뺴고 다 지워둔 상태입니다.

127.0.0.1:8000/blog/7/  로 들어가면 정상적으로 포스트가 나오는데 admin 페이지의 view on site 버튼을 누르면 127.0.0.1:8000/admin/r/7/7/ 로 들어가지고 

페이지가 작동하지 않습니다.

127.0.0.1에서 잘못된 응답을 전송했습니다.

ERR_INVALID_REDIRECT

이런 창이 뜹니다..

그냥 패스하고 그 다음인 tests.py에서 get_absolute_url을 테스트하는 부분으로 넘어가니

self.assertEqual(Post.objects.get_absolute_url(), 'blog/{}'.format(post_000.pk))

self.assertEqual(Post.objects.get_absolute_url(), 'blog/{}'.format(post_000.pk))

AttributeError: 'Manager' object has no attribute 'get_absolute_url'

이런 메시지가 뜨면서 테스트도 실패합니다.

제가 get_absolute_url()함수를 잘못 만든걸까요?

models.py

from django.db import models
from django.contrib.auth.models import User

class Post(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()
    head_image = models.ImageField(upload_to='blog/%Y/%m/%d/', blank=True)
    created = models.DateTimeField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.title) + ' :: ' + str(self.author)

    def get_absolute_url(self):
        return 'blog/{}/'.format(self.pk)

tests.py

from django.test import TestCase, Client
from bs4 import BeautifulSoup
from .models import Post
from django.utils import timezone
from django.contrib.auth.models import User

def create_post(title, content, author):
    blog_post = Post.objects.create(
            title = title,
            content = content,
            created = timezone.now(),
            author = author,
        )
    return blog_post

class TestView(TestCase):
    def setUp(self):
        self.client = Client()
        self.author_000 = User.objects.create(username='Smith', password='nopassword')

    def test_post_list(self):
        response = self.client.get('/blog/')
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, 'html.parser')
        title = soup.title
        
        self.assertEqual(title.text, 'blog')

        navbar = soup.find('div', id='navbar')
        self.assertIn('Blog', navbar.text)
        self.assertIn('About Me', navbar.text)

        self.assertEqual(Post.objects.count(), 0)
        self.assertIn('아직 게시물이 없습니다', soup.body.text)

        post_000 = create_post(
            title = 'test post',
            content = 'hello world',
            author = self.author_000,
        )

        self.assertGreater(Post.objects.count(), 0)

        response = self.client.get('/blog/')
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content, 'html.parser')

        self.assertNotIn('아직 게시물이 없습니다', soup.body.text)

    def test_post_detail(self):
        self.assertEqual(Post.objects.count(), 0)
        post_000 = create_post(
            title = 'test post',
            content = 'hello world',
            author = self.author_000,
        )
        self.assertGreater(Post.objects.count(), 0)
        self.assertEqual(Post.objects.get_absolute_url(), 'blog/{}'.format(post_000.pk))

bootstrap django python

답변 1

0

SungYong Lee

models.py에서 get_absolute_url()은 

return '/blog/{}/'.format(self.pk)가 되어야 합니다. 맨 앞에 슬래쉬를 빼놓으셨네요. 

그리고 맨 마지막에 Post.objects.get_absolute_url() 이 아니라, post_000.get_absolute_url() 아닌가요?

후속 강의

0

390

1

완성했습니다. 감사합니다

0

321

2

오늘 vps 에 domain 을 지정해주고 아직 활성화되지 않았는데

0

299

1

test 결과 두 가지 error 가 발생했습니다. 뭐가 잘못된 건지 도저히 모르겠습니다.

0

421

1

accounts/login 이 존재하지 않는다고 나옵니다

0

268

2

코드 질문입니다

0

248

1

포스트에 markdown을 사용해서 이미지를 추가할때

0

310

1

New Post 관련 질문드립니다.

0

179

1

이번 영상부터 각 포스트에 프리뷰 사진이 달라지셔서 질문 드립니다.

0

334

1

base 작업한 후 Category가 블로그 하단으로 내려갔습니다.

0

253

1

혹시 소스코드 전체가 담긴 주소를 좀 알 수 있을까요?

0

264

1

9분 경 테스트에서 Assretion Error가 발생합니다.

0

235

1

파이참 초기 설치 후 설정 관련해서 git에 항상 add되는 옵션을 체크했습니다.

0

345

3

F12를 눌러 console 창에서 오류를 확인할때 몇번째 줄인지 나오지 않습니다.

0

396

1

post view도 delete하려는데 막혀서 ㅠㅠ

0

197

1

"GET / HTTP/1.1" 400 143 그리고 "GET / HTTP/1.1" 404 2031

0

3304

3

연결이 안됩니다

0

506

8

서버에 연결하고 나면 그 후에 Cmder가 작동이 안되요

0

378

2

서버에 배포후 어드민계정

0

589

2

안녕하세요! 실서버에 올린 sqlite3의 데이터를 직접 확인하려면 어찌하나요?

0

2039

3

gitignore안먹히는현상

0

292

1

cmder 종료시 서버도 같이 종료됩니다.

0

220

1

' python manage.py makemigration blog ' 명령어 에러

0

588

2

python manage.py makemigrations 를 했을 때 오류가 납니다.

0

560

2