2017-02-05 4 views
7

Celeryタスクを使用するDjangoアプリケーションでテストを実行すると、Djangoがテストするデータベースに接続しないため、データベースからデータを取得する必要があるタスクを完全にテストできません作成します。 Trueにセロリでtask_always_eagerを設定Celeryをtask_always_eagerなしでDjangoのテストデータベースを使用する

は、部分的にこの問題を解決しますがdocumentation for testingが言うように、これは完全にコードが実際のセロリワーカー上で実行し、テストには適していませんでしょうか反映しません。

task_always_eager = Trueを設定せずにDjangoテストを実行しているときにCeleryタスクでDjangoテストデータベースを使用するにはどうすればよいですか?

答えて

8

ショート=あなたは、生産のように

簡単セロリワーカーを実行する必要があります(生産のように)

  1. を使用し、専用のテストデシベル手動
  2. スタートセロリの労働者をそれを使用する
  3. 設定セロリテストを実行する前に

アドバンス:

  1. 使用テストから自動作成されたテストデシベル(コピーdjango.conf.settings.DATABASEを使用するには、自動作成されたテストデシベル(それはsqliteのかもしれない)
  2. テストのセットアップで実行セロリワーカー()
  3. 設定セロリプロセスからセロリーへ)

そして、常にセロリ用のメッセージブローカーを提供する必要があります。

私はセロリのタスクと呼び出しコードの間のメッセージ渡し私のコードをチェックするために、専用のセロリの労働者を必要とするテストがあります: - 自己完結型の構成でTestUnitとセロリワーカーランナー https://gist.github.com/Sovetnikov/a7ad982fc77e8dfbc528bfc20fcf3b1e をこのPythonのモジュールは、1つに2つです。

私のコードではdbを使用していませんが、必要に応じて簡単に変更できます。 django.conf.settings.DATABASE(jsonやpickleなど)をセロリの初心者コードに渡し、Django DATABASEをtest dbを指すように設定してください。

追加情報:この場合https://github.com/RentMethod/celerytest(私は それのいくつかの古いバージョンを試してみました、それはPythonのGILで、スレッドを使用しているため、運を持っていない...と私のための完全なソリューションがあります

  1. それは

  2. サンプルコードは、初期化、データベースの設定を構成し、する方法を単一のモジュール自体にジャンゴ)の上に、複雑だと思うhttps://gist.github.com/Sovetnikov/369a8d05ba2b6482fa20769bc498f122

関連する問題