9

django-noseを使用した django プロジェクトがあります。プロジェクトにdjango-celeryを追加したいと思います。単体テストを使用します。django-nose と django-celery の両方で、settings.py ファイルに TEST_RUNNER 設定が必要です。具体的には:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

django-nose および:

TEST_RUNNER = 'djcelery.contrib.test_runner.CeleryTestSuiteRunner'

ジャンゴセロリ用。

両方のパッケージを使用できるようにするには、これをどのように処理すればよいですか?

4

3 に答える 3

4

テストをセロリとセロリに依存しない機能に分離できる場合は、セロリ タスクを呼び出すテスト クラスの設定をオーバーライドしてみてください。

from django.test.utils import override_settings

@override_settings(TEST_RUNNER='djcelery.contrib.test_runner.CeleryTestSuiteRunner')
class AsyncTestCase(TestCase):
     def test_async(self):
         self.assertEquals(add.delay(4,4), 8)

一方、NoseTestRunner は settings.py でデフォルトとして設定されます。

于 2013-04-15T01:48:53.540 に答える
2

Celery runner と Nose runner をサブクラス化すると、それらすべてに良い側面が得られます。

from django_nose import NoseTestSuiteRunner
from djcelery.contrib.test_runner import CeleryTestSuiteRunner

class TestRunner(CeleryTestSuiteRunner, NoseTestSuiteRunner):
    pass

次に、設定で:

TEST_RUNNER = '<package to>.TestRunner'

機能する理由:

help(TestRunner)

あなたは得る:

|  Method resolution order:
|      TestRunner
|      djcelery.contrib.test_runner.CeleryTestSuiteRunner
|      django_nose.runner.NoseTestSuiteRunner
|      django_nose.runner.BasicNoseRunner
|      django_nose.runner.BaseRunner
|      django.test.runner.DiscoverRunner
|      builtins.object

テスト CeleryTestRunner は、いくつかの構成を設定してから呼び出すだけで何もしませんでしたsuper().setup_test_environment()。次に、スーパーはそのチェーンで setup_test_environment() を探します。

Raymond Hettinger のビデオをご覧ください

于 2015-12-15T06:46:13.730 に答える