我有一个非常简单的测试如下:
import models
from django.test import TestCase
MyViewTest(TestCase):
def setUp(self):
self.trip = models.Trip.objects.order_by('?')[0]
def test_something(self):
# Blah Blah
每当我运行测试时,它都会引发下面提到的错误:
Traceback (most recent call last):
File "/home/amyth/Projects/test/trips/tests.py", line 8, in setUp
self.trip = models.Trip.objects.order_by('?')[0]
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 207, in __getitem__
return list(qs)[0]
IndexError: list index out of range
我也尝试将查询更改为models.Trip.objects.all()[0]
,但仍然会抛出同样的错误。奇怪的是,如果我在shell中使用上述任何查询,它的工作原理。那么它是如何在测试中不起作用的呢?
答案 0 :(得分:3)
请参阅django中的documentation测试。将创建一个新的“测试”数据库,并且不会使用您的“生产”数据库。除非您在TestCase setUp
方法中创建Trip条目,否则它为空。此外,在运行每个TestCase之后,数据库将被截断,因此如果您需要在多个TestCase中使用Trips,则需要在每个TestCase setUp
中为其创建数据库条目。