我正在运行测试以确保不会将电子邮件发送给某些用户:
it "does not send reminders to users who are not subscribed" do
expect(ReminderMailer).not_to receive(:send_reminder).with("whatever", user.id).and_return(double(deliver_now: true))
book.send_reminders("whatever", user.id)
end
Book.rb
def send_reminders(medium, user_id)
ReminderMailer.send_reminder(medium, user_id).deliver_now
end
但目前的测试是:
负面消息预期不支持and_return
如果我删除了and_return部分:
it "does not send reminders to users who are not subscribed" do
expect(ReminderMailer).not_to receive(:send_reminder).with("whatever", user.id)
book.send_reminders("whatever")
end
然后测试失败,因为:
未定义的方法`deliver_now'代表nil:NilClass
如何测试具有特定参数的动作邮件程序方法不?
答案 0 :(得分:4)
您的代码存在一些问题:
传递给方法send_reminders
的参数数量似乎是错误的(您只传递了一个参数'无论如何'但没有用户ID)
我没有看到过滤用户的条件,是ReminderMailer
的方法send_reminder
吗?所以无论如何它会调用send_reminder
,只是不会发送邮件,对吧?这不是你所期望的。
如果是这样,你可以试试这个:
expect {
book.send_reminders("whatever")
}.not_to change(ActionMailer::Base.deliveries, :count)
预计实际上不会发送任何邮件。祝你好运兄弟!