2012-03-14 4 views
0

'트랜잭션'이라는 모델에 대한 날짜 속성이 있습니다. 저장할 때 해당 트랜잭션이 범위 내에 있는지 확인한 다음 이전 트랜잭션으로 날짜를 설정하고 싶습니다.rspec 스텁 아웃 errors.add

작동하지만 테스트를 진행할 수없는 것 같습니다. 오류를 추가 할 때 폭탄을 계속 내 보냅니다. 'errors.add'줄을 스텁 (stub)하는 방법이 있습니까? 그래서 tran_date 값이 올바르게 변경되었는지 확인하기 위해 테스트를 분리 할 수 ​​있습니까? 그러나

1) Transaction Saving a transaction date is empty should set date to previous transaction 
    Failure/Error: @tran = Transaction.make!(:ledger => ledger, :tran_date => "") 
    ActiveRecord::RecordInvalid: 
     Validation failed: Tran date is outside financial year 

내가 다음 error.add 기능을 주석하면 내 테스트를 통과 :

def tran_date_within_financial_year 
    range = ledger.fin_start..ledger.fin_end 
    unless range === tran_date 
     tran = Transaction.all.order("created_at").last 
     self.tran_date = tran.tran_date 
     errors.add(:tran_date, "is outside financial year") 
    end 
    end 

여기 내 테스트

context "date is empty" do 
    it "should set date to previous transaction" do 
    @prev_tran = Transaction.make!(:tran_date => Date.new(2012,02,03)) 
    @tran = Transaction.make!(:tran_date => "") 
    @tran.save 
    @tran.reload.tran_date.should eq(@prev_tran.tran_date) 
    end 
end 

RSpec에 실행하는 것은 결과입니다. 따라서 이전 거래일로 정확하게 값을 설정하고 있습니다. 문제는 errors.add 테스트를 모두 중지합니다.

답변

0

음, 스펙에서는 잘못된 개체를 저장할 수 없다는 점을 강조합니다.

개체에 오류를 추가했기 때문에 개체가 유효하지 않습니다.

이 사양

통과해야합니다

context "date is empty" do 
    it "should set date to previous transaction" do 
    @prev_tran = Transaction.make!(:tran_date => Date.new(2012,02,03)) 
    @tran = Transaction.make(:tran_date => "") 
    @tran.should_not be_valid 
    @tran.errors.should have_key :tran_date 
    @tran.tran_date.should eq(@prev_tran.tran_date) 
    end 
end 
+0

통지 당신은 – apneadiving

+0

내가 몇 가지를'잊었 보인다 알려진 잘못된 개체에'make'가 아닌'make'를 사용해야합니다'위 ... :) – apneadiving

+0

-1입니다! 더 잘 설명 된 – apneadiving

관련 문제