Reputation: 3005
Currently when I have a delayed method in my code like the following:
CommentMailer.delay.deliver_comments(@comment, true)
I write something like this in my spec:
dj = mock("DelayProxy")
CommentMailer.should_receive(:delay).and_return(dj)
dj.should_receive(:deliver_comments).with(comment, true)
Is there a better way to handle this and/or chained methods like that in rSpec in general?
Upvotes: 12
Views: 7775
Reputation: 11
describe '#perform' do
subject do
Delayed::Worker.delay_jobs = false
proc { worker.perform() }
end
it { is_expected.to change { ActionMailer::Base.deliveries.length }.by(2) }
end
Set delayed job as false and u can test it like simple
Upvotes: 1
Reputation: 1234
We can just have one more line in the before block as following:
CommentMailer.stub(:delay).and_return(CommentMailer)
Then you then can have the normal mock check as following:
CommentMailer.should_receive(:deliver_comments).with(comment, true)
Upvotes: 28
Reputation: 3005
Here are some discussions about chaining methods in rSpec that I found helpful:
Stubbing Chained Methods with Rspec
http://groups.google.com/group/rspec/browse_thread/thread/6b8394836d2390b0#
Upvotes: 2