Django在信号内嘲笑请求

时间:2017-08-24 10:54:41

标签: python django

我一直在调查requests_mock库以检查响应。我只是想知道我怎么能真的劫持'实际要求做一个嘲笑的人。

在我的test_model.py我将创建一个新的SomeModel。当SomeModel.objects.create()完成后,将触发信号。

信号如下:

@receiver(post_save, sender=SomeModel, dispatch_uid="update_model")
def update_model(sender, instance, created, **kwargs):
    instance.update_status()

update_status函数开始,它通过另一个函数来设置有效负载和URL,然后它实际在send_model函数中执行请求,如下所示:

def send_model(url, payload):
    ....
    request.post(url, data=json.dumps(payload), headers=headers)  <- request to be mocked

我的问题是,在运行测试时如何实际模拟此请求?

1 个答案:

答案 0 :(得分:0)

Django有RequestFactory

  

RequestFactory provides a way to generate a request instance that can be used as the first argument to any view.

 mock_request = RequestFactory()
 mock_request.get('/url/')
 mock_request.post('/url/', data={'key':'value'})

编辑:

您可以通过模拟请求修补视图,查看mock库,PropertyMock类;我记得我有同样的问题,我这样做了:

import mock
with patch("views.MyView.request", create=True, new_callable=mock.PropertyMock, return_value=mock_request):
    # Run your view, do your test under the `with` statement where the view is patched with the mock_request
    self.assertFalse(True)