Django Celery测试跑步者做了很奇怪的事情

时间:2014-02-05 09:14:52

标签: python django unit-testing celery django-celery

我正在尝试在我的Django应用程序中测试一些芹菜功能,但我甚至无法让基本的测试系统失效。

当我按照所有内容说出并将TEST_RUNNER = 'djcelery.contrib.test_runner.CeleryTestSuiteRunner'添加到我的设置文件的底部时,当我尝试使用manage.py test进行测试时会发生一些不寻常的事情:

1)我从未写过的一堆测试似乎都在运行。以前,我有18个测试全部通过。现在,我运行测试,我得到了这个:

................................................................................
.....................x..........................................................
...................................................................
----------------------------------------------------------------------
Ran 227 tests in 0.802s

OK (expected failures=1)
Destroying test database for alias 'default'...

2)我的测试目前位于我的app文件夹中名为tests的文件夹中,每个文件都名为test_models.py。但是,在添加CelerySuiteTestRunner时,根本没有运行任何测试 - 我可以添加失败的测试,但它们不会失败。

3)但是,如果我删除该文件夹并在app文件夹中添加一个tests.py文件,则该文件中的任何内容都将运行。 (如果我保留tests文件夹,它将不会在tests.py文件中运行测试。)

我只是想把我芹菜相关任务的测试添加到我的应用程序中。谁能解释一下这里发生了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我假设你使用的是Django 1.6,changed the default test runnerCeleryTestSuiteRunner继承自Django的旧DjangoTestSuiteRunner,它运行所有已安装应用程序的测试,包括Django提供的应用程序,但不会发现tests模块之外的测试。

您可以使用新的CeleryTestSuiteRunner在您自己的测试运行器中重新实现DiscoverRunner,它将按预期发现您的测试,例如:

from django.test.runner import DiscoverRunner
from djcelery.contrib.test_runner import _set_eager

class CeleryDiscoverRunner(DiscoverRunner):
    def setup_test_environment(self, **kwargs):
        _set_eager()
        super(CeleryDiscoverRunner, self).setup_test_environment(**kwargs)