测试django视图时模拟模块

时间:2015-08-18 07:35:41

标签: python django unit-testing mocking

我有一个自定义函数来验证请求。我试图在测试期间模拟这个模块,但到目前为止没有运气

这是我的观点

from auth_utils import authenticate_request, UnauthenticatedRequest

def my_view(request):
    try:
        authenticate_request(request)
    except UnauthenticatedRequest:
        return Http404()
    return render(request, 'ok.html', {'status': 'ok'})

在测试中我试图模仿authenticate_request所以它不会引发错误

class TestMyView(MyAPITestCase, TestCase):

    @mock.patch('auth_utils.authenticate_request', side_effect=None)
    def setUp(self, mock_auth):
        self.response = self.client.get(reverse('my-view'))

    def test_should_return_ok(self):
        self.assertEqual(self.response.context.get('status'), 'ok')

无法使其发挥作用。有什么建议 ?

谢谢,Python 2.7,Django 1.8。

1 个答案:

答案 0 :(得分:4)

您需要模拟导入它的函数authenticate_request,而不是它定义的位置。

因此,例如,如果my_view中定义了myapp/views.py,则authenticate_request会导入myapp.views。所以你想打电话给以下内容:

@mock.patch('myapp.views.authenticate_request', side_effect=None)