0

Django アプリケーションがあり、次の処理を行う必要があります。

  • 私のビューの 1 つは、同じアプリケーションの別の URL エンドポイントに POST 要求を行う必要があります。
  • そのために、requestsモジュールを使用します。呼び出す必要があるエンドポイントの URL を組み立て、POST パラメーターをダンプして、呼び出しを実行します。
  • これはほとんどの場合問題なく動作しますが、私が話している URL に対応するビューはテスト環境の状態について何も知らないため、テスト時に惨めに失敗します。

コードは次のようになります。

from django.conf import settings
import json
def view1(request, *args, **kwargs):
    url = 'http://api.%s/view2/' % settings.DOMAIN      
    r = requests.post(
        url,
        data=json.dumps({'key': 'value'}),
    )      
    // Notice that the ``url`` is a url of the actual deployed application, 
    // and therefore knows nothing about testing and its state. That's where 
    // it goes wrong.

問題は、これがテストで正しく動作する方法があるかどうかです。このクラスを使用してdjango.test.client.Client、テスト リクエストを作成します。私の知る限り、このクラスのインスタンスは URL マッパーと直接やり取りします。したがって、ビューで作成する は、テスト済みurlのアプリケーションではなく、デプロイされたアプリケーションへの外部 http 要求にすぎません。

ありがとう。

4

1 に答える 1

1

これを解決する 1 つの方法は、テストのために URL からの応答をモックすることです。次のような軽量のモッキング ライブラリを使用することをお勧めします。

http://blog.moertel.com/posts/2011-11-07-a-flyweight-mocking-helper-for-python.html

サンプルコードを参照してください。それはあなたの状況に非常に似ています。これらの両方をリクエストとフラスコと組み合わせて使用​​しましたが、django は使用しませんでした。

于 2013-06-17T17:44:53.190 に答える