2017-03-02 57 views
0

我有一個類可以調用另一個對象的命令,我試圖在RSpec中測試它。在Rspec中模擬多個方法,其中第一個方法需要參數

SendWithUsInviteeMailer.send_invite(invitee_id).deliver

我想寫的東西是這樣的:

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

其中invitee.id被作爲參數傳遞給第一種方法。我如何正確測試它?有沒有使用消息鏈的方法?

回答

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 
+0

是對SendWithUs梅勒是一種行動的郵包?測試設置中發生了什麼?這可能與我不理解actionmailer有關?它有什麼作用? – Jwan622

相關問題