运行Django测试时,“CeleryTask匹配查询不存在”

时间:2013-05-23 20:56:23

标签: python django django-testing

我正在尝试测试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时不会发生这种情况。什么是应对它的正确方法?

1 个答案:

答案 0 :(得分:1)

请务必先阅读文档。阅读来到芹菜的那个a part就可以了。所需要的只是添加一个

TEST_RUNNER ='djcelery.contrib.test_runner.CeleryTestSuiteRunner'

settings.py。这就是测试无法获得任何Celery任务执行结果的原因。