【问题标题】:Mock module when testing django view测试 django 视图时模拟模块
【发布时间】:2015-11-11 00:43:39
【问题描述】:

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

这是我的看法

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。

【问题讨论】:

    标签: python django unit-testing mocking


    【解决方案1】:

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

    因此,例如,如果my_view 定义在myapp/views.py 中,那么authenticate_request 将被导入myapp.views。所以你想调用类似下面的东西:

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

    【讨论】:

    • 有道理...谢谢。
    • 没问题。建议您可以将标题更改为“在测试 Django 视图时模拟一个函数 [从另一个模块导入]”,因为这在技术上就是您在这里所做的。
    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多