Hey guys and gals,
I have a snippet of code:
Net::SMTP(@host, @port, @from_domain) do |smtp|
@emails.each do |email|
begin
smtp.send_message email.encoded, email.from, email.destinations
@emails_sent += 1
rescue Exception => e
# blah
end
end
end
What I want to do is:
Say there are 4 emails.
First email is sent OK
On the second email smtp raises a IOError error
The third and fourth emails are sent OK
I want to spec:
That the second iteration raises an error.
That the total emails sent count changed by 3
I can't seem to figure out how to stub/mock the smtp object to return
an email on the 1, 3, and 4th iteration and raise an error on the 2nd
iteration.
I thought something like this, but it doesn't work:
it "should only increase the sent emails counter if the email was sent" do
@smtp = mock(Net::SMTP)
@smtp.should_receive(:send_message).exactly(4).times.and_return(true,
IOError, true, true)
Net::SMTP.stub!(:start).and_yield(@smtp)
@sender = Mailer::Sender.new(valid_args(:emails => @emails))
@sender.sent_emails.should == 3
end
If anyone has any pointers, that would be great.
I am using rSpec trunk - today's release.
Mikel
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users