【问题标题】:Django Celery test runner doing very strange thingsDjango Celery 测试运行器做非常奇怪的事情
【发布时间】:2014-02-05 09:14:51
【问题描述】:

我正在尝试在我的 Django 应用程序中测试一些 celery 功能,但我什至无法关闭基本的测试系统。

当我按照所有内容进行操作并将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 文件中运行测试。)

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    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)
    

    【讨论】:

    • 我假设您的意思是重新实现 CeleryTestSuiteRunner(而不是 DjangoTestSuiteRunner)?无论哪种情况 - 它都有效 - 谢谢!我绝对不会想到那个。非常感激! :)
    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2012-11-09
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多