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)으로 얻을 수 있다고 생각했지만, 그렇지 않습니다.
그래, 나는 (질문의 내용에서 말했듯이) 이미 그것을 생각했지만 실제로 테스트하고 싶은 것은 이상적이지 않습니다. 다른 방법이 없습니까? – BPruvost
죄송합니다. 게시물의 일부를 놓 쳤습니다. 스스로 말하면서 문제는 ActionMailer의 인스턴스를 생성하지 않는다는 것입니다. @connexion 값을 직접 테스트하는 좋은 방법은 생각할 수 없습니다. 메일 출력을 확인하는 것이 좋은 옵션이 아닌 이유가 있습니까? –
글쎄 그냥 여기서 간단하게 처리했는데,이 프로젝트에서는 3 가지 변수에 따라 메일 출력에 9 가지 다른 콘텐츠가있을 수 있습니다. 그러면 테스트가 더욱 복잡해집니다. 그 3 가지 변수를 테스트하는 것이 더 쉬웠을 것입니다. 그러나 나는 선택의 여지가 없다고 생각합니다. 도와 주셔서 감사합니다! – BPruvost