如何在rspec存根中获取块的返回值?

时间:2015-08-13 01:35:16

标签: rspec

说我有这段代码:

Lollercoaster.lmao { 'this is fun' }

...

如何测试该块的评估?换句话说,我想做这样的事情:

 expect(Lollercoaster).to have_received(:lmao).with('this is fun')

但这显然不起作用,因为没有任何参数被发送到lmao方法。

文档将此作为示例:

allow(dbl).to receive(:foo) { |&block| block.call(14) }

但是当我尝试这个时,阻止是零......

2 个答案:

答案 0 :(得分:1)

原来,has_received不起作用,但正如文档所示,接收确实有效。

expect(Lollercoaster).to receive(:lmao) { |&block| expect(block.call).to eq 'this is fun' }

作品。

答案 1 :(得分:0)

这应该有效:

  expect(Lollercoaster).to receive(:lmao).with(key: value).and_return(return_value)

在您的特定示例中,您应该只需要这个(没有.with):

  expect(Lollercoaster).to receive(:lmao).and_return(return_value)