【问题标题】:On method called on double, expectations about the argument在双重调用的方法上,对参数的期望
【发布时间】:2014-07-29 07:42:58
【问题描述】:

我创建了一个 double,我正在执行代码,该代码将使用一个方法和一个巨大的哈希作为参数来调用它,我想验证参数的一个键,然后返回一个特定的哈希。

这就是我正在做的事情

before :each do
  allow(@my_double).to receive(:do_stuff).and_return({stuff: 42})
end
it "can do stuff" do
  expect(@my_double).to receive(:do_stuff) do  |arg|
    expect(arg).to be_a(Hash)
    expect(arg[:my_arg]).to eq(3)
  end
  TestObject.stuff() # will invoke do_stuff on the double
end

发生的情况是,第一次调用 do_stuff 时,它返回 true,这是 receive 块的结果,但在随后的调用中(在 pry 中测试)它正确返回 {stuff: 42} 但由于第一次调用错误,我的方法在返回时尝试调用[:stuff] 时出现异常。

我试图让allow 定义双精度的行为,所以我不想将返回值放在expect 的底部.. 但是有什么办法吗?

【问题讨论】:

  • 或者有更清洁的方法吗?喜欢expect(@my_double).to receive(:do_stuff).with(hash(my_arg: 3))
  • 现在将{stuff: 42} 添加到我的期望块的底部,但我想要一个更清洁的解决方案

标签: ruby testing rspec rspec3


【解决方案1】:

想出答案是使用 undocumented argument matcher hash_including 就像我的第一条评论一样

expect(@my_double).to receive(:do_stuff).with(hash_including(my_arg: 3))

这很好用。

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多