如何根据创建的对象字段值测试邮件是否发送

时间:2019-07-13 21:08:02

标签: ruby-on-rails rspec

我是Rspec的新手,我正在尝试为一个简单功能编写测试。

用户创建合同,如果合同已创建并且其属性具有特定值,则我发送电子邮件通知老师。  如何在测试中写下条件?

我正在使用letter_opener和ActionMailer。

describe "When a user creates a apprentice contract" do
 let(:admin) { users(:admin) }
 before { signin admin }

  it "should send an email to the teacher" do
    contract = create(:contract)
    contract.education_type.must_equal("company_apprentice")  
  end
end

contract.education_type.must_equal("school_apprentice")为真时,我想测试它是否发送电子邮件。

我如何在此测试中写出来?

1 个答案:

答案 0 :(得分:1)

it 'should send an email to the teacher' do
  expect { create(:contract, education_type: 'company_apprentice' }
    .to change { ActionMailer::Base.deliveries.count }
    .by(1)
end

您还需要以下设置:

# config/environments/test.rb
config.action_mailer.delivery_method = :test