我在测试我的Django应用时遇到了麻烦。我可以在浏览器中加载一个页面,但我的测试代码返回404。
此测试返回False:
def test_item(self):
response = self.client.get('/items/1/')
self.assertEqual(response.status_code, 200)
如果我在某处贴印刷线......
print(response)
...它按预期返回完整的HTML页面:
Vary: Accept-Language, Cookie
Content-Type: text/html; charset=utf-8
Content-Language: en
<!DOCTYPE html>
...
</html>
对我来说这看起来不错(应该是200)。但事实并非如此:
print(response.status_code)
...返回404
我错过了什么?
版本
Django 1.6,Python 2.7.6
网址
http://localhost:8000/items/1/
urls.py
urlpatterns = patterns('',
url(r"^(?P<item_id>[0-9]+/?)/$", "item.views.item_by_id",),
)
views.py
def item_by_id(request, item_id):
try:
item = Item.objects.get(id=item_id)
except Item.DoesNotExist:
raise Http404
return render(request, 'item.html', {'item': item})
答案 0 :(得分:7)
您没有与item_id
匹配的url
(即数据库中没有“1”)。在您看来,它正在尝试获取Item
,但它会引发异常,从而返回HTTP404
。测试和视图完全正常工作。
单元测试会创建一个新的(空)数据库,因此您的常规数据库中的任何Items
都不会出现。您需要在测试文件中使用您正在检查的Item
创建item_id
。
样品:
def test_item(self):
Item.objects.create(name="Item1") # Note you may need to edit the fields based on your model
response = self.client.get('/items/1/')
self.assertEqual(response.status_code, 200)