Ruby on rails RSpec应接收包含需要测试内容id的宏

Ruby on rails RSpec应接收包含需要测试内容id的宏,ruby-on-rails,ruby,ruby-on-rails-3,rspec,rspec2,Ruby On Rails,Ruby,Ruby On Rails 3,Rspec,Rspec2,如何编写此代码,使其在没有硬编码的情况下通过1。鸡和蛋 @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
。鸡和蛋

@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)
这个怎么样

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

我认为rspec使用should matchers来验证'should_receive'上的预期参数,否则像anything()之类的东西就不能工作了?我的想法是编写一个自己的参数匹配器,它与数据库中的第一个id匹配。虽然这在本文的摘要中仍然是一个问题,但我在具体的问题中解决了它。我在
test.rb
中打开了deliveries,并使用
ActionMailer::Base.deliveries
来测试邮件。