在TestCase中进行查询时的IndexError

时间:2013-04-02 13:02:29

标签: django testing

我有一个非常简单的测试如下:

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中使用上述任何查询,它的工作原理。那么它是如何在测试中不起作用的呢?

1 个答案:

答案 0 :(得分:3)

请参阅django中的documentation测试。将创建一个新的“测试”数据库,并且不会使用您的“生产”数据库。除非您在TestCase setUp方法中创建Trip条目,否则它为空。此外,在运行每个TestCase之后,数据库将被截断,因此如果您需要在多个TestCase中使用Trips,则需要在每个TestCase setUp中为其创建数据库条目。