私のプロジェクトでは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の残りのフレームワークをテストしていた場合「に行くために、どのように
!私のシリアライザよりも、自分自身を問うメートル?ありがとう事前に!
通常のシリアライザをすべてテストする必要はなく、self.client [HTTP_METHOD](url、data = data)メソッドを使用して達成できるAPIエンドポイント全体をテストしたいと思います。 これをチェックしてください:https://docs.djangoproject.com/en/1.10/topics/testing/tools/ –
あなたの考えをありがとう。だから私は現在このアプローチを考えています: 1)このようなAPIをテストする: "DELETE/running/run/1'を要求した後、ID 1のRunモデルはもう存在しなくなります。 2)、 "self.assertEqual(person.name、" Peter ")' "のような自分の小さなクラス/メソッド/プロパティをユニット単位でテストしています" あなたは(@Taras) –
Yeap、それははるかに良いと思う。 DjangoやDRFをテストしていないことに注意してください。CRUDの動作がデフォルトのものであれば、テストする必要はありません。 カスタムロジックとビジネスロジックのみをテストする必要があります。 –