在Rspec中模拟多个方法,其中第一个方法接受参数

时间:2017-03-02 16:56:50

标签: rspec

我有一个类对另一个对象进行命令调用,我试图在RSpec中测试它。

SendWithUsInviteeMailer.send_invite(invitee_id).deliver

我想写这样的东西:

expect(SendWithUsInviteeMailer).to receive_message_chain(:send_invite, :deliver).with(invitee.id)

其中invitee.id作为参数发送到第一个方法。我该如何正确测试?有没有办法使用消息链?

1 个答案:

答案 0 :(得分:1)

我可能会隐藏send_invite方法并检查交付情况,如下所示:

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

在您的规范中:

before do
  ActionMailer::Base.deliveries.clear
  allow(SendWithUsInviteeMailer).to receive(:send_invite).and_call_original
end

it 'sends out the right email'
  expect(SendWithUsInviteeMailer).to receive(:send_invite).with(invitee.id)
  # perform the action to be tested
  expect(ActionMailer::Base.deliveries.count).to eq 1
end