Django 测试中的错误 404?
我在测试我的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})
1 个回答
7
你没有一个和你的 url
匹配的 item_id
(也就是说,你的数据库里没有“1”这个记录)。在你的视图中,它试图获取 Item
,但出现了错误,所以返回了一个 HTTP404
。你的测试和视图的工作方式完全正确。
单元测试会创建一个新的(空的)数据库,所以你在正常数据库里有的任何 Items
都不会显示出来。你需要在测试文件中创建一个带有你正在检查的 item_id
的 Item
。
示例:
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)