0

djcelery を使用して定期的なタスクがあります。このタスクはデータベースを調べており、必要に応じて同じ変更を行います。ご存知のように、「python manage.py test」はテスト データベースを作成するので、このテスト データベースでこの定期的なタスクを実行するにはどうすればよいでしょうか。

私は最初に実行しようとしました: python manage.py test

次に、次を実行しようとしたとき

python manage.py セロリ ワーカー -l 情報 &

python manage.py セロリ ビート -l 情報 &

テストが終了しました

4

1 に答える 1

-1

セロリ ワーカーやセロリ ビートを実行する必要はありません。これは、単体テストとしてはあまり適していません。タスクをテストしようとしているので、タスクを分離してテストする必要があります。CELERY_ALWAYS_EAGER モードでテストを実行するか、非同期モードを使用せずにテスト内からタスクを実行する必要があります。

非同期の使用を避けるには、次のようにタスクを呼び出すだけです。

@celery.task
def task_to_test():
    print('stuff')


def test:
   task_to_test()

それができない場合。常に熱心に使用するように設定をオーバーライドします。

from tasks import task_to_test

@override_settings(CELERY_EAGER_PROPAGATES_EXCEPTIONS=True,
                   CELERY_ALWAYS_EAGER=True,
                   BROKER_MEMORY='memory',
                   CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',}})
class MyTests(TestCase):
def test():
    task_to_test.delay()
于 2015-12-21T08:01:37.530 に答える