2011-08-12 3 views
2

current_user.eligible_for_reward를 호출하는 도우미 메서드가 있습니까? 카피 바라 (Capybara) 수락 사양에서 그 전화를 스텁하고 싶습니다.Capybara 수용 테스트에서 컨트롤러/current_user 메소드를 스텁하는 방법

다음
User.rb 

def eligible_for_reward? 
    "blah" 
end 

내가 지금까지 시도한 것입니다 : 내 모델에서 나는 자리 더미 방법이

  1. 내가 CURRENT_USER 스텁 시도하지만, 그는 "냉동 개체를 수정"오류가 발생합니다 컨트롤러가 0이기 때문에. RSpec의 방문 some_path 대신 get을 사용할 경우에만 컨트롤러가 설정됩니다 믿습니다. 나는 some_path 방문을 고수해야하는데, 그렇지 않으면 내 페이지가 믿어진다. 페이지가 설정되지 않았기 때문에 모두 실패해야한다.

  2. 사용자 (로그인/로그인을 통해 성공적으로 실행되는 login_as (user))로 로그인 한 다음 user.eligible_for_reward?를 스터 빙하려고했지만 여전히 작동하지 않는 것처럼 보입니다. 테스트 "ㅋ"

이 방법을 스터핑하는 좋은 방법이 있습니까?

답변

7

수용 사양의 스터 빙은 좋은 생각이 아닙니다. 다른 방법이 없다면 당신이 단지 수 있습니다

User.any_instance.stub!(:eligible_for_reward?).and_return(true) 

그냥 수용 사양에 물건을 조롱/그 스터 빙 기억은 정말 아무것도 테스트하지 않는 것을 의미한다.

+0

다른 접근 방식을 취했습니다. 동의 스텁이 여기에 최선이 아니 었습니다. 감사. –

+1

카피 바라에 대한 완전한 통합 테스트 만이 아니라는 점에 유의하십시오. Test :: Unit, RSpec 또는 MiniTest의 Capybara/Selenium을 사용하여 Javascript 기능을 테스트하고 Rails에서 최대한 빨리 실행할 수있는 모든 것을 스텁 아웃하는 것이 이상적입니다. 또한 Devise를 스 태킹 할 때, 필자는 스텁에 대해 더 철저히하는 것을 선호한다 : authenticate_user! 아무것도하지 않으려면 컨트롤러의 #current_user를 스텁으로 만들어 가짜 사용자 인스턴스를 반환하십시오. 그런 식으로, Devise는 완전히 그림에서 벗어납니다. –

+1

'stub!'는'stub'으로 대체해야합니다. 'stub!'은 그 메소드의 구식의 부적절한 별명입니다. [이 전자 메일] (http://www.mail-archive.com/[email protected]/msg13270.html)의 마지막 세 단락을 참조하십시오. – skalee

관련 문제