33

在我的 Rails 控制器中,我正在创建同一个模型类的多个实例。我想添加一些 RSpec 期望,以便我可以测试它是否使用正确的参数创建了正确的数字。所以,这就是我的规范中的内容:

Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => @user.id, :position_id => 1, :is_leader => true)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "2222", :position_id => 2)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "3333", :position_id => 3)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "4444", :position_id => 4)

这会引起问题,因为似乎 Bandmate 类只能设置 1 个“should_receive”期望值。因此,当我运行示例时,出现以下错误:

Spec::Mocks::MockExpectationError 中的“BandsController 应在创建时创建所有乐队成员”
模拟 'Class' 预期:使用 ({:band_id=>1014, :user_id=>999, :position_id=>1, :is_leader=>true}) 创建但使用 ({:band_id=>1014, :user_id= >"2222", :position_id=>"2"})

这些是第二次调用 create 的正确参数,但 RSpec 正在针对错误的参数进行测试。

有谁知道我如何设置我的 should_receive 期望以允许多个不同的调用?

4

2 回答 2

40

多重期望根本不是问题。鉴于您对无序期望的特定参数,您遇到的是订购问题。查看此页面以了解有关订购预期的详细信息。

简短的故事是,您应该.ordered在每个期望的末尾添加。

于 2008-10-29T23:05:36.393 回答
-3

模拟接收计数

my_mock.should_receive(:sym).once
my_mock.should_receive(:sym).twice
my_mock.should_receive(:sym).exactly(n)
.times my_mock.should_receive(:sym).at_least(:once)
my_mock.should_receive(: sym).at_least(:twice)
my_mock.should_receive(:sym).at_least(n)
.times my_mock.should_receive(:sym).at_most(:once)
my_mock.should_receive(:sym).at_most(:twice)
my_mock。 should_receive(:sym).at_most(n)
.times my_mock.should_receive(:sym).any_number_of_times

也适用于 rspec 2.5。

于 2011-03-03T09:20:02.983 回答