Program Tip

RSpec 테스트 후 ActionMailer :: Base.deliveries 지우기

programtip 2020. 12. 14. 20:47
반응형

RSpec 테스트 후 ActionMailer :: Base.deliveries 지우기


내 UserMailer 클래스에 대해 다음 RSpec 테스트가 있습니다.

require "spec_helper"

describe UserMailer do
  it "should send welcome emails" do
    ActionMailer::Base.deliveries.should be_empty
    user = Factory(:user)
    UserMailer.welcome_email(user).deliver
    ActionMailer::Base.deliveries.should_not be_empty
  end
end

이 테스트는 처음에는 통과했지만 두 번째 실행에서는 실패했습니다. 약간의 디버깅을 수행 한 후 첫 번째 테스트에서 ActionMailer :: Base.deliveries 배열에 항목을 추가했으며 해당 항목이 지워지지 않은 것으로 보입니다. 배열이 비어 있지 않기 때문에 테스트의 첫 번째 줄이 실패합니다.

RSpec 테스트 후 ActionMailer :: Base.deliveries 배열을 지우는 가장 좋은 방법은 무엇입니까?


AM :: Base.deliveries는 배열 일 뿐이므로 빈 배열로 초기화 할 수 있습니다. 비어있는 첫 번째 확인도 제거 할 수 있습니다.

describe UserMailer do
  before { ActionMailer::Base.deliveries = [] }

  it "should send welcome emails" do
    user = Factory(:user)
    UserMailer.welcome_email(user).deliver
    ActionMailer::Base.deliveries.should_not be_empty
  end
end

각 테스트 후 전달을 매우 쉽게 지울 수 있으며이를 spec_helper.rb에 추가 할 수 있습니다.

RSpec.configure do |config|
  config.before { ActionMailer::Base.deliveries.clear }      
end

Rails올바른 이메일 구성에 대한 기사를 읽고 올바르게 테스트하는 것에 대해서도 이야기 하는 것이 좋습니다 .


Andy Lindeman이 지적했듯이 우편물 테스트를 위해 배달 지우기가 자동으로 수행됩니다. 그러나 다른 유형의 경우 단순히 , :type => :mailer래핑 블록에 추가 하여 동일한 동작을 강제합니다.

describe "tests that send emails", type: :mailer do
  # some tests
end

참고 URL : https://stackoverflow.com/questions/5843284/clearing-out-actionmailerbase-deliveries-after-rspec-test

반응형