rspec产量块,但调用原始

nte*_*rry 4 ruby unit-testing rspec yield block

所以我有以下内容:

foo.each do |f|
  f.begin
    do_stuff
    do_more_stuff
  end
end
Run Code Online (Sandbox Code Playgroud)

我用一个and_yield()调用来模拟f对象.我希望能够通过传递原始块{do_stuff do_more_stuff}来测试begin方法,而不是模拟实现....我不能在模拟上调用begin方法而不至少对其进行存根,那么做什么呢我做?

nte*_*rry 8

再一次,我找到了一个没有记录的功能:

allow(thing).to receive(:foo) do |_, &block|
  block.call
end
Run Code Online (Sandbox Code Playgroud)

感叹......

  • 未记录:https://www.relishapp.com/rspec/rspec-mocks/v/3-1/docs/configuring-responses/block-implementation (3认同)

Nat*_*ouy 5

以下对我有用:

original = thing.method(:foo)
expect(thing).to receive(:foo) do |_params|
  # check params
  expect(params).to include(something)

  # then
  original.call(params)
end
Run Code Online (Sandbox Code Playgroud)