1

我想测试

  • 如果视图装饰器正常工作
  • 如果调用了正确的视图

所以,这里的装饰器get_object和视图featuresmyapp.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 测试客户端的情况下单独测试您的装饰器。您真的在这里将两个测试合二为一。第一个是确保装饰器完成它的职责,另一个是确保请求被正确路由。

于 2013-03-20T05:52:49.693 回答