2010-04-23 5 views
4

내 컨트롤러 사양 내에서 유효하지 않습니다. 다음과 같이 (라이언 베이츠 nifty_scaffold 기준) 일부 라우팅 테스트 용 : -any_instance의 모카 스터 빙을 취소 할 수있는 방법이 있습니까?

it "create action should render new template when model is invalid" do 
    Company.any_instance.stubs(:valid?).returns(false) 
    post :create 
    response.should render_template(:new) 
end 

내가 따로 컨트롤러를 테스트 할 때이 괜찮습니다. 나는 또한 내 모델 사양에 다음과 같은 것을 가지고있다.

it "is valid with valid attributes" do 
    @company.should be_valid 
end 

다시 한번이 테스트는 고립 상태에서 잘 작동한다. 문제는 내가 모델과 컨트롤러 모두를 위해 스펙을 실행하면 나온다. 모델 테스트는 항상 유효한 것으로서 실패합니까? 메소드가 스텁 아웃되었습니다. 컨트롤러 테스트가 찢어 질 때 any_instance의 스터 빙을 제거하는 방법이 있습니까?

컨트롤러 이전에 모델 테스트가 실행되도록 역순으로 테스트를 실행하여 문제를 해결했지만 실제로 테스트가 시퀀스에 종속적이라고 생각하지 않습니다.

답변

4

RSpec을 수동으로 구성해야합니다.

Rspec.configure do |config| 
    ... 

    # == Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
    # config.mock_with :rspec 
end 

또한 Rspec은 개체를 조롱하는 자체 메서드를 제공합니다. RSpec API를 사용하면 라이브러리 추상화의 이점을 누릴 수 없습니다. http://rspec.info/documentation/mocks/message_expectations.html

+0

해결책은 정확하지만 설명은 정확하지 않습니다. Mocha는 RSpec을 감지하지 못하지만 RSpec 구성이 설명 된대로 설정되면 RSpec은 적절한 지점에서 Mocha를 호출합니다. –

+0

주석을 업데이트했습니다. 고맙습니다. @floehopper –

1

은 spec_helper이 테스트 사이의 모의 객체를 해체해야한다는 RSpec에와

Spec::Runner.configure do |config| 
    config.mock_with :mocha 
end 

이 포함되어 있습니까.

3

저도 같은 문제가 발생하지만 Rspec하지만 정상 Test::Unit, 실제로 ActionController::TestCase을 사용하지 않는.

정의 된 기대치가 테스트 중에 유지됩니다.

테스트간에 의 예상 값을 어떻게 재설정 할 수 있습니까?

  • 루비 : 1.9.2
  • 레일 : 3.0.3
  • 모카 : 0.9.10

업데이트는 : http://mocha.rubyforge.org/classes/Mocha/ObjectMethods.html#M000009

: 나는 unstub 모카 방법으로이 문제를 해결했다
관련 문제