2017-03-09 13 views
3

JSON으로 테스트를 실행하면 rspec에 전체 사양이 표시되지 않으므로 반환과 예상간에 차이가 없음을 알 수 없습니다.RSpec은 반환과 예상 사이에 완전한 차이를 보여주지 않습니다.

는 DIFF의 메시지는

expected: "{\"id\":1,\"number\":1,\"sequential\":1,\"emitted_at\":\"2014-01-01T13:35:21.000Z\",\"status\":\"aut...erenceds_attributes\":[{\"id\":null,\"nfe_key\":\"42150707697707000148550010000020101000020105\"}]}" 
    got: "{\"id\":1,\"number\":1,\"sequential\":1,\"emitted_at\":\"2014-01-01T13:35:21.000Z\",\"status\":\"aut...erenceds_attributes\":[{\"id\":null,\"nfe_key\":\"42150707697707000148550010000020101000020105\"}]}" 

AUT는 ... 메시지의 중간에 모습을 erenceds_attributes ... 으로 단축

내 스크립트 테스트 :

RSpec.describe InvoiceSerializer do 
    let(:invoice) do 
    build :invoice, :testing_serializer 
    end 

    subject { described_class.new invoice } 

    it "returns a json" do 
    expected = { 
     id: 1, 
     number: 1, 
     sequential: 1, 
     emitted_at: "2014-01-01T13:35:21.000Z", 
     status: "authorized", 
     invoice_bills_attributes: [{ 
     id: nil, 
     expire_at: "2014-01-02T00:00:00.000Z", 
     value: "1.23" 
     }], 
     ... 
    }.to_json 

    expect(subject.to_json).to eq expected 
    end 
end 

Example of error in my console

테스트를 확인하는 데 사용할 보석/플러그인 또는 예상 기능은 무엇입니까?

저는 콘솔과 Rubymine IDE를 사용합니다.

은 지금은 사용

puts "1 --> #{subject.to_json}" 
puts "2 --> #{expected}" 

그리고 나는 내 테스트를 debbug하는이 쓰기 싫어.

+0

rspec 버전? rspec-rails입니까? – Anthony

+2

하나의 아이디어 :'.to_json' 메소드가 String을 리턴하는지 테스트 한 후,'JSON.parse'를 통해 파싱 할 수 있는지 테스트하십시오. 그러면 메서드가 유효한 JSON을 반환하고 있음을 알 수 있습니다. 그런 다음 구문 분석 된 데이터 해시를 사용하여 예상 해시와 _that_를 비교합니다. 출력은 여전히 ​​완벽하지 않을 수 있습니다 (지금은 그 출력을 기억하지 못함). 그러나 해시를 반복하고 대신 각 키/값 쌍을 비교할 수 있습니다. 그것은 그들 사이에 정확히 다른 점을 알려줄 것입니다. – MrDanA

+0

rspec-rails를 사용합니다 - 3.5.2 – Linielson

답변

2

이 도움이 될 수 있습니다 : 보너스로 https://github.com/waterlink/rspec-json_expectations

, 그것은 당신이보다 세분화 된 테스트를 만드는 데 사용할 수있는 속성의 부분 집합의 측면에서 테스트를 지정할 수 있습니다.

+0

나는 이것을 좋아하지만 "같음"을 사용해야하고 "포함하지"말아야한다. – Linielson

관련 문제