2014-06-20 4 views
2

UserMailer 모델에서 메서드를 호출 할 때 주어진 인스턴스 변수가 설정되어 있는지 확인하려고합니다. 나는 RSpec을 사용하고 있으며 그것을 알아낼 수 없다.Rspec의 메일러에서 인스턴스 변수 가져 오기

class UserMailer < ActionMailer::Base 
    def client_connexion_notification(connexion) 
    @connexion = connexion 
    mail to: "[email protected]", subject: "Connexion!" 
    end 
end 

그리고 테스트 : 여기

은 메일러입니다 내가 모델의 인스턴스에 instance_variable_get 호출해야합니다 알고

it "should set @connexion" do 
    UserMailer.client_connexion_notification("stackoverflow") 
    UserMailer.instance_variable_get(:@connexion).should == "stackoverflow" 
end 

,하지만 난 ActionMailer 당신 때문에 다른 역할을하는 것 같아요 정말로 새로운 인스턴스를 생성하지 않아도됩니다. (메소드 new는 private 임)

내가 생각할 수있는 대안 중 하나는 ActionMailer :: Base.deliveries로 생성되는 실제 전자 메일의 내용을 테스트하는 것이지만, 변수의 실제 내용을 테스트하는 것이 좋습니다.

아직, 나는 ActionMailer :: Base.deliveries.last.instance_variable_get (: @ connexion)으로 얻을 수 있다고 생각했지만, 그렇지 않습니다.

답변

0

대신 지금과 같은 결과 이메일에있는 변수의 존재를 테스트 할 수 :

it "should set @connexion" do 
    mail = UserMailer.client_connexion_notification("stackoverflow") 
    mail.raw_source.should include("stackoverflow") 
end 

이 메일 여러 부분되지 않는 것으로 가정합니다.

+0

그래, 나는 (질문의 내용에서 말했듯이) 이미 그것을 생각했지만 실제로 테스트하고 싶은 것은 이상적이지 않습니다. 다른 방법이 없습니까? – BPruvost

+1

죄송합니다. 게시물의 일부를 놓 쳤습니다. 스스로 말하면서 문제는 ActionMailer의 인스턴스를 생성하지 않는다는 것입니다. @connexion 값을 직접 테스트하는 좋은 방법은 생각할 수 없습니다. 메일 출력을 확인하는 것이 좋은 옵션이 아닌 이유가 있습니까? –

+0

글쎄 그냥 여기서 간단하게 처리했는데,이 프로젝트에서는 3 가지 변수에 따라 메일 출력에 9 가지 다른 콘텐츠가있을 수 있습니다. 그러면 테스트가 더욱 복잡해집니다. 그 3 가지 변수를 테스트하는 것이 더 쉬웠을 것입니다. 그러나 나는 선택의 여지가 없다고 생각합니다. 도와 주셔서 감사합니다! – BPruvost

관련 문제