2017-01-19 16 views
1

私のプロジェクトではcoach私は情報シリアライザのテストに問題があります。 、だから私は、データがInformationSerializer(self.information_serializer.data)によって返されたことを、テストしたいDjango Rest Framework:シリアライザのテスト

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) 

ました:私はこれを持って私のテストでは

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

:私は、ファイルrunning/serializes.pyに次のシリアライザクラスを持っていますキー"velocity"は、VelocitySerializer(mock_velocity.data)によって返されたデータを指します。

しかしself.information_serializer.data["velocity"]だけOrderedDict([('id', 1), ('minimum', 8.0), ('average', 10.0), ('maximum', 12.0)])(モデルに保存され、データが含まれています。私のせいがどこにある私にはわからない...

はまた別の質問は次のようになり、私は本当に私なので?これをテストする必要があります私はより多くにDjangoの残りのフレームワークをテストしていた場合「に行くために、どのように

!私のシリアライザよりも、自分自身を問うメートル?ありがとう事前に!

+0

通常のシリアライザをすべてテストする必要はなく、self.client [HTTP_METHOD](url、data = data)メソッドを使用して達成できるAPIエンドポイント全体をテストしたいと思います。 これをチェックしてください:https://docs.djangoproject.com/en/1.10/topics/testing/tools/ –

+0

あなたの考えをありがとう。だから私は現在このアプローチを考えています: 1)このようなAPIをテストする: "DELETE/running/run/1'を要求した後、ID 1のRunモデルはもう存在しなくなります。 2)、 "self.assertEqual(person.name、" Peter ")' "のような自分の小さなクラス/メソッド/プロパティをユニット単位でテストしています" あなたは(@Taras) –

+0

Yeap、それははるかに良いと思う。 DjangoやDRFをテストしていないことに注意してください。CRUDの動作がデフォルトのものであれば、テストする必要はありません。 カスタムロジックとビジネスロジックのみをテストする必要があります。 –

答えて

1

ちょうどあなたのビジネスロジックをテストします。私はモデルをテストしていた知っていますシリアライザは自分でも、実際には私たちは必要はありません.Djangoはすでにそれらをテストしています。

CRUD操作が正しく機能しているかどうかを確認するには、ビューで統合テストを行います。

関連する問題