2013-06-05 1 views
1

의 단순 비교를 할 수 RSpec에 컨트롤러 검사를 받기 : 대부분의 모델에 대한나는 시험과 RSpec에 컨트롤러가 BigDecimal를

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 필드는 십진수입니다. 이로 인해 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">] 

BigDecimal를 2 개의 동일한 값을 가질 수 있지만, 다른 개체이다. rspec이 비교를 할 때 이들을 동등하게 취급 할 수있는 방법이 있습니까?

+0

는 당신이 문제는 다른 배열 인스턴스는 확인되지 않고 있습니까? 예 : '~해야 ~ ~ [rate_card_detail]'또는 '... should match_array ([rate_card_details])'를 시도 했습니까? ATM은 아무것도 테스트 할 수 없습니다. –

+0

안녕 데이브, 제안 주셔서 감사합니다. 나는 그 둘을 시도해 보았고 둘 다 시도하지 않았다. 그것들은 누락 된 요소 및 추가 요소와 마찬가지로 실제가 예상과 일치하지 않는 "모음 포함"오류를 발생시킵니다. –

+0

은'(rate_card_details) .to_yaml.should eq ([rate_card_detail]). to_yaml'이 작동합니까? – doesterr

답변

0

꽤 아니지만이 나와 함께 작동

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).first.attributes.values.each_with_index do |rcd,i| 
    r_c_d = rate_card_detail[i] 
    if rcd.is_a?BigDecimal 
     rcd = rcd.to_s 
     r_c_d = r_c_d.to_s 
    end 
    expect(rcd).to eq(r_c_d) 
    end 
end 
+0

예. 예쁘지는 않지만 작동합니다. 감사 –