Django Test client.get()返回302代码而不是200代码

时间:2017-12-07 13:21:49

标签: django django-urls django-tests

在网址上运行测试会返回302而不是200.然而,使用重定向测试器测试生产中的相同网址会返回200.不确定发生了什么。

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'),

views.py

def product_detail(request, slug):
    stuff...
    return render(request, 'product-detail.html', {})

如果我将follow=True添加到client.get(),我会按预期收到200个代码。

1 个答案:

答案 0 :(得分:2)

response['location']行之前在测试中打印assertEqual的值。它将显示客户端被重定向到的位置(例如登录页面)。

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