2017-01-19 3 views
1

In meinem Projekt coach habe ich ein Problem beim Testen der Information Serializer. Ich habe folgende Serializer Klassen in der Datei running/serializes.py:Django Rest Framework: Testen Sie die Serialisierer

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") 

In meinem Test habe ich dies:

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) 

Deshalb möchte ich testen, dass die Daten von der InformationSerializer (self.information_serializer.data) zurückgegeben hat Ein Schlüssel "velocity", der auf die vom VelocitySerializer zurückgegebenen Daten zeigt (mock_velocity.data).

Aber self.information_serializer.data["velocity"] enthält nur die Daten, in den Modellen gespeichert (OrderedDict([('id', 1), ('minimum', 8.0), ('average', 10.0), ('maximum', 12.0)]). Ich weiß nicht, wo meine Schuld ...

Auch eine andere Frage wäre, dies tun müssen teste ich, weil ich wirklich? ‚ich ist in Frage, wenn ich mehr die Django Ruhe Rahmen testen bin als meine Serializer ?!

So wie es weitergehen? Vielen Dank im Voraus!

+0

Sie müssen nicht jeden normalen Serialisierer testen, ich würde lieber den gesamten API-Endpunkt testen, der mit der Methode self.client. [HTTP_METHOD] (url, data = data) erreicht werden kann. Überprüfen Sie dies: https://docs.djangoproject.com/en/1.10/topics/testing/tools/ –

+0

Vielen Dank für Ihren Gedanken. Also denke ich über diesen Ansatz nach: 1) Testen der API wie folgt: "Nach der Anforderung" DELETE/running/run/1 "sollte kein Run-Modell mit der ID 1 mehr existieren." 2) und Unit-Tests meine eigenen kleinen Klassen/Methoden/Eigenschaften wie "' self.assertEqual (person.name, "Peter") '" Was denken Sie (@Taras) darüber? –

+0

Yeap, das klingt viel besser. Bitte denken Sie daran, dass Sie Django oder DRF nicht testen. Wenn Ihre CRUD-Aktionen also Standard sind, müssen Sie das auch nicht testen. Nur Ihre benutzerdefinierte und geschäftliche Logik muss getestet werden. –

Antwort

1

Sie Ihre Geschäftslogik testen. ich weiß, dass ich Modell teste Serialisierer selbst, aber in Wahrheit brauchen wir das nicht. "Django hat sie bereits getestet.

Führen Sie einfach einen Integrationstest in der Ansicht durch, um zu sehen, dass Ihre CRUD-Operationen korrekt funktionieren.

Verwandte Themen