1

나는 일련의 일련 번호를 가지고있다. 이제 테스트를 위해 JSON을 원래 객체로 되돌리고 싶습니다. ActiveModel :: Serializers로 그 일을 할 수있는 방법이 보이지 않습니다. 이전에는 더 이상 사용되지 않는 from_json 메소드가 사용 된 것처럼 보입니다. 이걸 어떻게해야 하죠?ActiveModel :: Serializer에서 json을 개체로 구문 분석하는 방법

기본적으로이 같은 라운드 트립 테스트하려면 : 제대로 그 때문에하지 예상되는 형식으로 시리얼에서 JSON을 읽지 않습니다

json = WidgetSerializer.new(@widget).to_json 
testw = Widget.new 
testw.from_json(json) #from_json doesn't exist in ActiveModel::Serializers 
@widget.should == testw 

그러나 모델의 "from_json"방법을

답변

0

것은 내가 생각할 수있는 가장 좋은 중 하나 Widget.find() 또는 Widget.find_by는(), 당신은 당신의 시리얼로 전달 특성에 따라 예를 들어

(그 중 특히 경우 하나의 고유 속성이다) 사용 serializer에 id (단순 귀하의 경우) :

json = WidgetSerializer.new(@widget).to_json 
    target_id = JSON.parse(json)[:id] 
    test_widget = Widget.find(target_id) 
    @widget.should == test_widget 
+0

슬프게도 데이터베이스에서 개체를 얻을 것이고, 단위 테스트의 목적을 무효로 할 json이 아닙니다. (나는 단위 테스트에 대해 명시 적으로 말하지 않았지만 ".should =="는 힌트입니다.) – nont

+0

물론 데이터베이스에서 가져옵니다. 그렇지 않으면 == 어떻게 될 수 있습니까? from_json 메소드가 똑같은 속성을 가진 새로운 위젯을 반환했다하더라도, "id"와 "created_at"값은 다를 것입니다. (당신이 단위 테스트를 요구한다는 것을 깨닫고 있지만, 당신이 테스트하고있는 것을 이해하지 못한다 - 당신은 Serializer에 모든 속성을 포함하는 것을 잊지 않았다.) – Matthieu

+0

네, serializer가 작동하는지 테스트하고 싶습니다. 중첩 된 자식 객체가있는 복잡한 객체입니다. – nont