我正在尝试测试Django项目的某些部分。测试是:
class SearchTest(TestCase):
def test_object_added(self):
SomeSingleton().add_one_object_to_model()
tmp = SomeModel.objects.latest('id')
self.assertEqual(tmp.some_field,SOME_VALUE)
这里我调用一些函数来以某种方式向模型添加对象。创建模型与一些Celery任务执行有关。测试的目的是检查添加模型的字段值。因此,当一个对象被添加到模型中时,它将成为最新的id
。
我跑./manage.py test some_app
时得到了这个:
DoesNotExist:CeleryTask匹配查询不存在。
我在这里找到了this question并尝试做同样的事情。我将'id'
中的tmp = SomeModel.objects.latest('id')
更改为所有可能的变体:u'id'
,u'"id"'
甚至u"id"
和u"'id'"
。单引号符号类型的变体我仍然遇到同样的问题。但我得到了
FieldError:无效的order_by参数:[u' - “id”']
带有两种引号类型的变体。没关系,我们还有其他方法来获取模型的最新对象吗?我还没找到一个有效的。我尝试在get_latest_by = "id"
声明class Meta
,但我遇到了与不存在的查询相同的问题。
我尝试了一些Python方法(我仍然使用某种列表,对吗?),例如tmp = SomeModel.objects.all()[-1]
,SomeModel.objects.all()[len(SomeModel.objects.all())-1]
,问题是
AssertionError:不支持负索引。
然后我尝试SomeModel.objects.all().reverse()[0]
,但立即回答:
IndexError:列表索引超出范围
我坦率地感到困惑。在./manage.py shell
输入时,所有这些方法都可以正常工作,因此我可以获得最新模型,但出于某种原因,使用./manage.py test some_app
时不会发生这种情况。什么是应对它的正确方法?
答案 0 :(得分:1)
请务必先阅读文档。阅读来到芹菜的那个a part就可以了。所需要的只是添加一个
TEST_RUNNER ='djcelery.contrib.test_runner.CeleryTestSuiteRunner'
到settings.py
。这就是测试无法获得任何Celery任务执行结果的原因。