2017-01-19 5 views
1

내 프로젝트에서 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)])가 포함되어 있습니다. 내 잘못입니다 몰라요 ...

또한 또 다른 질문이 될 것이다, 정말?이 테스트해야합니까 때문에 내 시리얼보다 더 장고 나머지 프레임 워크를 테스트하고있어 경우 '가

그래서 방법에 갈!, 나 자신에 의문을 제기거야? 사전에 감사!

+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

를 그냥 비즈니스 로직을 테스트합니다. 나는 모델을 테스트 한 알 serializer를 사용하는 것이 좋지만 실제로는 필요하지 않습니다. 장고는 이미 테스트를 마쳤습니다.

보기에서 통합 테스트를 수행하여 CRUD 작업이 올바르게 작동하는지 확인하십시오.

관련 문제