2017-12-07 19 views
0

URL에서 테스트를 실행하면 200 대신 302가 반환됩니다. 리디렉션 테스터로 프로덕션에서 동일한 URL을 테스트하면 200이 반환됩니다. 무슨 일이 일어나는지 잘 모르겠습니다. 예상대로Django 테스트 client.get()은 200 대신 302 코드를 반환합니다.

tests.py

def test_detail(self): 
    response = self.client.get('/p/myproduct-detail.html') 
    self.assertEqual(response.status_code, 200) 

urls.py는

url(r'^p/(?P<slug>[-\w\d]+).html$', main.views.product_detail, 
     name='product-detail'), 
def product_detail(request, slug): 
    stuff... 
    return render(request, 'product-detail.html', {}) 

내가 client.get()follow=True를 추가하는 경우

views.py

나는 200 코드를받을 수 있습니다.

+0

브라우저에서 URL을 열면 마지막으로 열리는 URL은 /p/myproduct-detail.html 또는 /p/myproduct-detail.html/입니다. – Kostas

+0

@Kostas /p/myproduct-detail.html – KingFu

답변

1

assertEqual 줄 앞에 테스트에서 response['location']의 값을 인쇄하십시오. 클라이언트가 리디렉션되는 위치 (예 : 로그인 페이지)를 표시합니다.

def test_detail(self): 
    response = self.client.get('/p/myproduct-detail.html') 
    print(response['location']) 
    self.assertEqual(response.status_code, 200) 
+0

감사합니다. "/"를 반환합니다. 아아, 나는 이것으로 알아 냈다고 생각한다. Http404()를 올리고 인덱스로 리디렉션해야한다. 이 테스트를 처음 작성한 것이므로 dev db의 복사본을 사용한다고 가정했지만 지금은 그렇지 않습니다. – KingFu

+1

장고가 생성 한 테스트 데이터베이스는 개발자 db의 복사본이 아닙니다. 예를 들어 ['setupTestData'] (https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test)를 사용하여 테스트를 실행하기 전에 테스트 데이터베이스에 개체를 만들어야 할 수도 있습니다. .TestCase.setUpTestData)를 호출합니다. – Alasdair