Django:如何模拟 request.session 的视图?
Django : How can I mock request.session of view?
我正在使用模拟来测试视图。
tests.py
@patch('orders.views.OrderView.generate_merchant_uid')
def test_expected_price_is_registered_on_GET_request(self, mock_generate_merchant_uid):
self.client.get(reverse('orders:order'))
views.py
class OrderView(LoginRequiredMixin, View):
def generate_merchant_uid(self):
merchant_uid = "blah_blah_blah"
return merchant_uid
def get(self, request, *args, **kwargs):
merchant_uid = self.generate_merchant_uid()
request.session['merchant_uid'] = merchant_uid
return HttpResponse('a')
出现错误:
TypeError: <MagicMock name='generate_merchant_uid()' id='4431843456'> is not JSON serializable
它发生错误是因为我模拟了 generate_merchant_uid
并且它 returns MagicMock
和 View
试图将这个 MagicMock
存储在 request.session
.
我觉得我要做的就是mock request.session
。
但不知道我该怎么做。
需要建议。谢谢。
问题不在于模拟会话本身。你忘了设置你的模拟函数应该 return。默认情况下,它 return 是一个 Mock 对象,它试图存储它的请求会话并将其转换为 JSON,这就是你遇到错误的地方,Mock 实例不是 JSON 可序列化的。
@patch('orders.views.OrderView.generate_merchant_uid')
def test_expected_price_is_registered_on_GET_request(self, mock_generate_merchant_uid):
mock_generate_merchant_uid.return_value = //here goes your mocked value
self.client.get(reverse('orders:order'))
例如:
mock_generate_merchant_uid.return_value = "blah_blah_blah"
我正在使用模拟来测试视图。
tests.py
@patch('orders.views.OrderView.generate_merchant_uid')
def test_expected_price_is_registered_on_GET_request(self, mock_generate_merchant_uid):
self.client.get(reverse('orders:order'))
views.py
class OrderView(LoginRequiredMixin, View):
def generate_merchant_uid(self):
merchant_uid = "blah_blah_blah"
return merchant_uid
def get(self, request, *args, **kwargs):
merchant_uid = self.generate_merchant_uid()
request.session['merchant_uid'] = merchant_uid
return HttpResponse('a')
出现错误:
TypeError: <MagicMock name='generate_merchant_uid()' id='4431843456'> is not JSON serializable
它发生错误是因为我模拟了 generate_merchant_uid
并且它 returns MagicMock
和 View
试图将这个 MagicMock
存储在 request.session
.
我觉得我要做的就是mock request.session
。
但不知道我该怎么做。
需要建议。谢谢。
问题不在于模拟会话本身。你忘了设置你的模拟函数应该 return。默认情况下,它 return 是一个 Mock 对象,它试图存储它的请求会话并将其转换为 JSON,这就是你遇到错误的地方,Mock 实例不是 JSON 可序列化的。
@patch('orders.views.OrderView.generate_merchant_uid')
def test_expected_price_is_registered_on_GET_request(self, mock_generate_merchant_uid):
mock_generate_merchant_uid.return_value = //here goes your mocked value
self.client.get(reverse('orders:order'))
例如:
mock_generate_merchant_uid.return_value = "blah_blah_blah"