2010-03-02 5 views
1

오늘 Ro 객체를 호출하기 위해 RoR을 사용하여 문제가 발생했습니다. 나는의 라인을 따라 뭔가 할 수있을 거라고 생각 : 나는이 방법을 시도 할 때 그러나 전혀 방법을 스텁 보이지 않았다RoR에서 ActiveRecord 객체와 함께 작동하도록 instance_of를 얻는 방법은 무엇입니까?

stub.instance_of(BankAccount).save_to_other_spot { true } 

을하고 원래 방법 I을 실행 끝낼 것 스텁을하려고 했어. 이 작품

stub.proxy(BankAccount).find(anything) do |account| 
    stub(account).save_to_other_spot { true } 
    account 
end 

:이 사용하는 디버거 등

그래서 나는 다음과 같은 방법을 사용하여 종료를 확인했다.

내가 뭔가 잘못하고 있는지 궁금한가요? instance_of가 예상대로 작동하지 않는 이유는 무엇입니까?

내가 겪었던 또 다른 문제는 내 RSpec 테스트에서 각 요청에 대해 내 모의 (mock)와 스텁 (stub)을 설정해야한다는 것입니다. 다시 말하지만, 정상입니까, 아니면 제가 잘못하고 있습니까? 상단에 한 번 내가 조롱 할 수있을 거라고 생각

... mock and stub ... 
get :show, :id => @id 

... mock and stub ... 
post :update, :id => id, :account => { ... params ... } 

및 스텁이에 의해

는 내가 뭔가를해야 할 것입니다 의미한다.

답변

1

RSpec> 2.5 ...를 실행한다고 가정하면 mock/stubbing 구문이 개선되어 이제 다음 정의를 사용할 수 있습니다.

BankAccount.any_instance.stub(:save_to_other_spot) { true } 

참고 a latter version of RSpec을 사용해야합니다. 이전 버전의 RSpec에는 any_instance 메소드가 포함되어 있지 않습니다. 그들은 모카 (Mocha)에서 이것을 빌려 RSpec mock에 구현 한 것 같습니다.

RSpec의 이전 버전을 사용하고 있다면, 내가하는 일은 유일한 방법이라고 생각합니다. 내가 이것을 다음과 같이 쓰는 경향이 있습니다 :

@bank_account = BankAccount.new 
BankAccount.stub(:find) { @bank_account } 
@bank_account.stub(:save_to_other_spot) { true } 

나는 당신의 블록 방법이 더 깨끗해 보입니다.

관련 문제