2011-09-13 45 views
2

我该如何编写这个文件,以便它在没有硬编码的情况下通过1。鸡和鸡蛋。RSpec should_receive宏,其中包含需要测试的内容的ID

@sender = Factory(:user) 
@receiver = Factory(:user) 

mailer = double 
mailer.should_receive(:deliver) 
Mailer.should_receive(:email).with(1, @sender.id, @receiver.id).and_return(mailer) 

# This will create an object with id #1 to make this test pass 
@object = Object.create(:sender => @sender, :receiver => @receiver) 
+0

我觉得rspec的使用应该-的匹配,以验证“should_receive”预期参数,否则东西像什么()不能工作?我的想法是编写一个自己的参数匹配器,它匹配数据库中的第一个id。 –

+1

虽然这仍然是一个抽象的问题,但我在我的具体问题中解决了这个问题。我在'test.rb'中调用了交付,并使用'ActionMailer :: Base.deliveries'来测试邮件。 – maletor

回答

4

这个怎么样?

Mailer.should_receive(:email).with(an_instance_of(Fixnum), @sender.id, @receiver.id).and_return(mailer) 
相关问题