2016-08-04 5 views
1

Я построил веб-приложение, где back-end реализован с использованием Django REST Framework. Теперь я пишу модульные тесты, и я столкнулся с проблемой тестирования моих методов сериализации. Вот один из примеров метода сериализатора я борюсь с:Django REST Framework - задать запрос в тесте serializer?

def get_can_edit(self, obj): 
     request = self.context.get('request') 
     user = User.objects.get(username=request.user) 
     return user == obj.admin 

При попытке вызвать это из теста, сначала я объявляю экземпляр сериализатором:

self.serializer = ConferenceSerializer() 

Но теперь мне нужно self.serializer, чтобы получить правильный запрос, если get_can_edit делает self.context.get('request'). Я создал поддельный запрос с правильной информацией с использованием RequestFactory:

self.request1 = RequestFactory().get('./fake_path') 
self.request1.user = self.user1 

Теперь я застрял, потому что я не уверен, как добавить request1 к serializer такой, что self.context.get('request') вернется request1.

Спасибо.

ответ

4

Вы должны проход context аргумента добавить request1 в сериализатору-х context в то время как инстанцировании сериализатор в тесте.

От DRF Документов на including extra context:

Вы можете обеспечить произвольный дополнительный контекст, передавая context аргумент при инстанцировании сериалайзера.

Вам нужно сделать что-то вроде:

# pass context argument 
self.serializer = ConferenceSerializer(context={'request': request1}) 

Это обеспечит желаемый объект request1 к вашему сериализатору в context.

+0

Это сработало - Большое спасибо! – Tom

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