내 프로젝트에서 coach 정보 직렬기를 테스트하는 데 문제가 있습니다. 나는 파일 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)])
가 포함되어 있습니다. 내 잘못입니다 몰라요 ...
또한 또 다른 질문이 될 것이다, 정말?이 테스트해야합니까 때문에 내 시리얼보다 더 장고 나머지 프레임 워크를 테스트하고있어 경우 '가
그래서 방법에 갈!, 나 자신에 의문을 제기거야? 사전에 감사!
모든 일반 시리얼 라이저를 테스트 할 필요는 없지만 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 작업이 기본 동작 인 경우 다음을 수행 할 필요가 없습니다. 사용자 지정 및 비즈니스 논리 만 테스트해야합니다. –