我需要确保运行导入程序会发出电子邮件。
这是我到目前为止得到的:
describe '#import' do
it 'triggers the correct mailer and action', :vcr do
expect(OrderMailer).to receive(:delivery_confirmation).with(order)
Importer.new(@file).import
remove_backed_up_file
end
end
它失败了:
pry(#<ActiveRecord::ConnectionAdapters::TransactionManager>)> error
=> #<NoMethodError: undefined method `deliver_now' for nil:NilClass>
这显然是行不通的,因为我期望 Mailer 类接收(实例)方法调用。但是我如何才能获得将接收调用的邮件程序实例呢?您将如何测试单元的方法是否触发特定的邮件程序?
最佳答案
我假设实际上的delivery_confirmation
方法返回一个Mail
对象。问题是 ActionMailer
将调用邮件对象的 deliver
方法。您已设置了一个期望来消除 delivery_confirmation
方法,但尚未指定返回值。试试这个
mail_mock = double(deliver: true)
# or mail_mock = double(deliver_now: true)
expect(mail_mock).to receive(:deliver)
# or expect(mail_mock).to receive(:deliver_now)
allow(OrderMailer).to receive(:delivery_confirmation).with(order).and_return(mail_mock)
# the rest of your test code
关于ruby-on-rails - Rails,RSpec : How to test, 触发特定的邮件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42551997/