2011-09-01 2 views
4

railscast (http://railscast.com/episodes/275-how-i-test)의 에피소드에서 영감을 얻어 앱에 몇 가지 요청 사양을 추가하려고했습니다.capybara 및 delayed_job으로 이메일을 테스트하는 경우

내 이메일을 보내기 위해 delayed_job을 사용하여 카피 바라 테스트에서 이메일 전송을 테스트하는 쉬운 방법을 찾지 못했습니다. 나는 시도했다 :

it "emails user when requesting password reset" do 
     ...(some user action that triggers sending an email)... 
     Delayed::Worker.new.work_off 
     ActionMailer::Base.deliveries.last.to.should include(user.email) 
    end 

어떤 힌트 또는 도움을 주셔서 감사합니다!

답변

3

음, 작동해야합니다. 내 애플 리케이션에서 몇 가지 잘못된 구성을 발견했다.

시험을 확인하십시오. 당신은 설정해야합니다 : 지금

module MailerMacros 
    def last_email 
    Delayed::Worker.new.work_off 
    ActionMailer::Base.deliveries.last 
    end 

    def reset_email 
    Delayed::Job.destroy_all 
    ActionMailer::Base.deliveries = [] 
    end 
end 

당신이 확인할 수 있습니다 :

last_email.to.should include(user.email) 

Staffomatic::Application.configure do 
    ... 
    config.action_mailer.delivery_method = :test 
    config.action_mailer.default_url_options = { :host => "example.com" } 
end 

내가 지연 :: 작업을 작업 할 railscast에서 메일러 매크로 모듈 라인을 추가

마지막 이메일

매우 쉽게!

ps. 굉장한 mail_safe 보석을 설치했다면 테스트 환경에 있지 않은지 확인해야합니다!

8

훨씬 쉬운 해결책 : 설정/초기화 도구에 초기화 도구를 만듭니다. 실제 테스트에서

Delayed::Worker.delay_jobs = !Rails.env.test? 

을 delayed_job_config.rb 당신도 그들을 깨끗하고 간단하게 유지하는, 그 delayed_job가 메일을 보낼 배포 알 필요가 없습니다.

관련 문제