2017-03-09 4 views
3

JSONでテストを実行すると、rspecは完全な仕様を示さないため、リターンと予想の違いはわかりません。メッセージRSpecはリターンと予想の間に完全な違いを表示していません

私のスクリプトのテストの途中で

差分のメッセージはに短縮されています...

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

1つのアイデア: '.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

関連する問題