2017-01-19 12 views
1

В моем проекте coach У меня возникла проблема с тестированием информационного сериализатора. У меня есть следующие классы Serializer в файле running/serializes.py:Django Rest Framework: тестовые сериализаторы

class Velocity(serializers.ModelSerializer): 
    class Meta: 
     model = VelocityModel 
     fields = ("id", "minimum", "average", "maximum") 


class Information(serializers.ModelSerializer): 
    heart_beat = HeartBeat(read_only=True) 
    velocity = Velocity(read_only=True) 

    class Meta: 
     model = InformationModel 
     fields = ("id", "distance", "velocity", "heart_beat", "calories") 

В моем тесте я это:

from running import models, serializers 

@patch("running.serializers.Velocity") 
def test_contains_id(self, mock_velocity): 
    # mocking stuff 
    returned_data = {} 
    mock_velocity.data = PropertyMock(return_value=returned_data) 

    # creating instances of the models 
    self.velocity = models.Velocity(minimum=8, average=10, maximum=12) 
    self.velocity.save() 
    self.heart_beat = models.HeartBeat(minimum=120, average=130, maximum=140) 
    self.heart_beat.save() 
    self.information = models.Information(distance=3.7, velocity=self.velocity, heart_beat=self.heart_beat, calories=132) 
    self.information.save() 

    # create the actual serializer 
    self.information_serializer = serializers.Information(self.information) 

    self.assertEqual(self.information_serializer.data["velocity"], returned_data) 

Так что я хочу, чтобы проверить, что данные, возвращаемые InformationSerializer (self.information_serializer.data), имеет ключ "velocity", который указывает на данные, возвращаемые VelocitySerializer (mock_velocity.data).

Но self.information_serializer.data["velocity"] содержит только данные, сохраненные в моделях (OrderedDict([('id', 1), ('minimum', 8.0), ('average', 10.0), ('maximum', 12.0)]). Я не знаю, где моя вина ...

Также еще один вопрос будет, мне действительно нужно, чтобы проверить это? Потому что я «м допроса себя, если я тестирую больше Джанго Rest Framework, чем мои сериализаторы ?!

Так как идти дальше? заранее спасибо!

+0

Вам не нужно проверять каждый обычный сериализатор, я бы скорее протестировал всю конечную точку API, которая может быть достигнута с помощью метода self.client. [HTTP_METHOD] (url, data = data). Проверьте это: https://docs.djangoproject.com/en/1.10/topics/testing/tools/ –

+0

Спасибо за вашу мысль. Поэтому я сейчас думаю об этом подходе: 1) Тестирование api следующим образом: «После выполнения запроса« DELETE/running/run/1', модель Run с идентификатором 1 больше не должна существовать ». 2) и модульное тестирование моих собственных маленьких классов/методов/свойств, таких как «self.assertEqual (person.name,« Peter »)' » Что вы (@Taras) думаете об этом? –

+0

Yeap, это звучит намного лучше. Пожалуйста, имейте в виду, что вы не тестируете Django или DRF, поэтому, если ваши действия CRUD по умолчанию - вам тоже не нужно тестировать :) Необходимо проверить только свою пользовательскую и бизнес-логику. –

ответ

1

Просто проверить свою бизнес-логику. Я знаю, что я тестировал модель сериализаторы, но на самом деле нам это не нужно. Django уже тестировал их.

Просто выполните интеграционный тест, чтобы увидеть, что ваши операции CRUD работают правильно.