テスト付きのrspecコントローラーがあります:
it "assigns all rate_card_details as @rate_card_details" do
rate_card_detail = FactoryGirl.create(:rate_card_detail)
get :index, {}, valid_session
assigns(:rate_card_details).should eq([rate_card_detail])
end
ほとんどのモデルでは、これで問題なく動作します。ただし、この場合、rate
フィールドは 10 進数です。これにより、(何らかの理由で) rspec の比較で、メモリ内の場所を含め、BigDecimal の 1 つのインスタンスが別のインスタンスと比較されます。エラーは次のとおりです。
Failure/Error: assigns(:rate_card_details).should eq([rate_card_detail])
expected: [#<RateCardDetail rate_card_id: 1, item_id: 1, rate: #<BigDecimal:7f82dcdb0ae0,'0.6941E2',18(18)>, created_at: "2013-06-05 18:12:53", updated_at: "2013-06-05 18:12:53">]
got: [#<RateCardDetail rate_card_id: 1, item_id: 1, rate: #<BigDecimal:7f82dc9a74d0,'0.6941E2',18(18)>, created_at: "2013-06-05 18:12:53", updated_at: "2013-06-05 18:12:53">]
2 つの BigDecimals は同じ値を持ちますが、異なるオブジェクトです。比較を行うときにこれらを同等に扱うようにrspecを取得する方法はありますか?