2016-10-25 3 views
0

Я использую насмешку над тестами.Django: Как я могу высмеять request.session зрения?

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 и его RETU rns MagicMock и View пытается сохранить это MagicMock в request.session.

Я думаю, что мне нужно сделать, чтобы издеваться над request.session.

Но понятия не имею, как я могу это сделать.

Нужны советы. Благодарю.

ответ

1

Проблема не в том, чтобы насмехаться над самой сессией. Вы забыли настроить то, что должна вернуть ваша издеваемая функция. По умолчанию он возвращает объект 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" 
+0

Вы меня спасти! Спасибо, леви! – user3595632

Смежные вопросы