1

テストしたい

  • ビュー デコレータが適切に機能する場合
  • 適切なビューが呼び出された場合

したがって、ここにデコレータget_objectとビューfeaturesがありmyapp.viewsます。

@get_object
def features(request, object):
    return {}

私はこれを嘲笑してみます:

new_view = Mock(__name__='features', return_value={})
decorated = get_object(new_view)

with patch('myapp.views.features') as features:
    features = decorated
    client = Client()
    response = client.get('/features')
    print new_view.call_args

モック オブジェクトが呼び出されていないかのように、これは何も表示しません。

装飾されたビューを適切にモックするにはどうすればよいですか?

4

1 に答える 1

1

あなたが電話するとき、patchあなたはあなたのビューを真新しいものに置き換えていますMagicMock。ビューのモックを手動で作成しているため、次のようなことを行う必要があります (未テスト):

new_view = Mock(__name__='features', return_value={})
features = get_object(new_view)

with patch('myapp.views.features', features):
    client = Client()
    response = client.get('/features')
    print new_view.call_args

myapp.views.featuresこれは、手巻きモックに置き換えられます。

ただし、一般的には、Django テスト クライアントを使用せずにデコレータを単独でテストすることをお勧めします。ここでは、2 つのテストを 1 つに実際に混合しています。1 つ目は、デコレータがその義務を果たしていることを確認することであり、もう 1 つ目は、リクエストが適切にルーティングされることを確認することです。

于 2013-03-20T05:52:49.693 に答える