0

Django プロジェクトの一部をテストしようとしています。テストは次のとおりです。

class SearchTest(TestCase):
    def test_object_added(self):
            SomeSingleton().add_one_object_to_model()
            tmp = SomeModel.objects.latest('id')
            self.assertEqual(tmp.some_field,SOME_VALUE)

ここでは、オブジェクトをモデルに追加する関数を呼び出しています。作成モデルは、一部の Celery タスクの実行に関連しています。テストの目的は、追加されたモデルのフィールドの値を確認することです。そのため、オブジェクトがモデルに追加されると、最新のものになりidます。

実行したときにこれを取得しました./manage.py test some_app

DoesNotExist: CeleryTask に一致するクエリが存在しません。

ここでこの質問を見つけて、同じことをしようとしました。可能なすべてのバリアントに変更'id'しました: 、さらにはと. 一重引用符記号タイプのバリアントでも同じ問題が発生していました。しかし、私は得ましたtmp = SomeModel.objects.latest('id')u'id'u'"id"'u"id"u"'id'"

FieldError: 無効な order_by 引数: [u'-"id"']

両方の引用符タイプを持つバリアントに。モデルの最新のオブジェクトを取得する他の方法はありますか? 機能するものは見つかりませんでした。get_latest_by = "id"atを宣言しようとしましclass Metaたが、存在しないクエリについて同じ問題が発生しました。

私はいくつかのPythonの方法を試しました(私はまだリストのようなものを扱っていますよね?)tmp = SomeModel.objects.all()[-1]SomeModel.objects.all()[len(SomeModel.objects.all())-1]問題は

AssertionError: 負のインデックスはサポートされていません。

それから私は試しSomeModel.objects.all().reverse()[0]ましたが、すぐに答えられました:

IndexError: リスト インデックスが範囲外です

私は率直に言って困惑しています。これらの方法はすべて、で入力するとうまく機能./manage.py shellするため、最新のモデルを取得できますが、何らかの理由で を使用すると発生しません./manage.py test some_app。それに対処する正しい方法は何ですか?

4

1 に答える 1

1

常に最初にドキュメントを読んでください。セロリに来るものの一部を読むとうまくいきました。必要なのは、

TEST_RUNNER ='djcelery.contrib.test_runner.CeleryTestSuiteRunner'

settings.py。これが、テストで Celery タスクの実行結果が得られなかった理由です。

于 2013-05-23T21:56:48.960 に答える