モデルがdjangoアプリケーションに保存されたときに実行されるセロリのタスクを修正するためにPythonモックライブラリを使用して、正しく呼び出されているかどうかを確認しようとしています。Djangoの単体テストでモックを使ってセロリのタスクを修正する
基本的には、タスクがmyapp.tasks
内で定義されており、そのような私のmodels.pyファイルの先頭にインポートされます:
from .tasks import mytask
...そして使用してモデル内save()
上で実行されますmytask.delay(foo, bar)
。これまでのところ、Celerydなどを実際に実行しているときにはうまくいきます。
私はタスクを疑似する単体テストを構築したいのですが、正しい引数で呼び出されることを確認するだけです。実際にはこれまでセロリの仕事をしてみてください。
ので、テストファイルで、私は、標準的なテストケースのこの内部のようなものを持っている:
from mock import patch # at the top of the file
# ...then later
def test_celery_task(self):
with patch('myapp.models.mytask.delay') as mock_task:
# ...create an instance of the model and save it etc
self.assertTrue(mock_task.called)
を...それが呼ばれることは決してありません/常にfalseです。私はいろいろな化身を試しました(代わりにmyapp.models.mytask
をパッチして、代わりにmock_task.delay
が呼び出されたかどうかを確認しています)。私は偽のドキュメントからインポート経路が重要であると主張しました。 (私はそれを正しく理解すれば、myapp.models.mytask.delay
いうよりmyapp.tasks.mytask.delay
だろう)テスト下のモジュール。
は?セロリのタスクをパッチでいくつかの特定の困難は、私のように使用されているcelery.task
を(パッチを適用できますか?ありますデコレータをmytask
に)代わりに?
は、あなたが「=真CELERY_ALWAYS_EAGER」を設定する代わりに、それを嘲笑試してみましたか? – clsung