0

我正在尝试测试 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 匹配查询不存在。

我在这里找到了这个问题并尝试做同样的事情。我更改'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. 应对它的正确方法是什么?

4

1 回答 1

1

始终首先阅读文档。阅读Celery的一部分就可以了。所需要的只是添加一个

TEST_RUNNER ='djcelery.contrib.test_runner.CeleryTestSuiteRunner'

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

于 2013-05-23T21:56:48.960 回答