2011-02-23 5 views
2

안녕하세요 모두 내가 액티브 메일을 상속했지만 행운이없는 모델에서 특정 메서드가 특정 메서드를 호출하는 경우 테스트 할 Rspec을 얻으려고합니다. 빠른 모형으로 다음과 같은 시나리오가 있습니다. 모델 UserNotifier :RSpec ActiveMailer 모델로 테스트 호출

class UserNotifier < ActionMailer::Base 
    def foobaz 
    end 
end 

컨트롤러 암호 컨트롤러 :

class PasswordsController < ApplicationController 

def foobar 
    UserNotifier.foobaz 
end 

그리고 사양 :

describe "GET 'foobar'" do 

    it "should call the UserNotifier foobaz method" do 
    UserNotifier.should_receive(:foobaz) 
    get :foobar 
    end 
end 

하지만 난 항상이 실패로 끝날 :

1) PasswordsController GET 'foobar' should call the UserNotifier foobaz method 
Failure/Error: UserNotifier.should_receive(:foobaz) 
    (<UserNotifier (class)>).foobaz(any args) 
     expected: 1 time 
     received: 0 times 

수있는 사람 왜 그런지 가르쳐주세요. RSpec은 UserNotifier.foobaz 메서드가 호출되고 있다는 것을 등록하지 않습니까?

+0

이 예제를 복제하고 예제를 통과합니다. 어쩌면 문제를 발견 한 원래 코드를 게시해야합니다. – zetetic

+0

이것은 원래의 코드입니다. 나는 변화시키지 않았고이를 통과 할 수 없습니다. –

+2

필자는 어떤 종류의 로그인 체크가 있거나 그 슈퍼 컨트롤러 중 하나에 있기 때문에 'PasswordsController'에 접근하지 못한다고 생각합니다. –

답변

0

Ryan Bigg의 의견에 답변되었습니다. 결국 메소드가 실행되지 않는 원인이 된 before_filter가되었습니다.

0

정확히 같은 문제가 발생했지만 모든 필터 (모든 필터를 사용하지 않음) 때문이 아닙니다. 한 가지 차이점은 ApplicationController에 대한 액션을 호출하는 것입니다.하지만 그 이유가 중요하지는 않습니다. rspec 실행에 거기에 삽입 된 출력이 포함되어 있지만 Rspec이 호출을 볼 수 없으므로 foobaz 메소드가 확실히 호출됩니다. 무엇이 잘못 될 수 있는지에 대한 다른 아이디어가 있습니까?

+0

신경 쓰지 마라. 나는 이것들을 분류하는 동안 전화를 받기 위해 여러 가지 조롱을 시도했다. 그들은 실패했다. UserNotifier.should_receive (: foobaz)가 작동합니다. – fakeleft

관련 문제