rspec如何测试我的产量是否被调用

时间:2017-08-03 17:14:09

标签: ruby-on-rails ruby rspec

我需要测试我的方法是否正确屈服,实现类似于

def method(val)
   @attr = yield(val) 
end

我写了我的测试:

expect{ |b| x.method(&b) }.to yield_control.once

问题是我需要分配@attr才能完全完成测试。由规范生成的块b不会返回nil,因此@attr变为nil,这使得无法得出规范。

我基本上需要块返回它收到的相同值。

我尝试创建一个lambda并期望它接收call但是它不起作用,我猜是因为它是一个块。

l = ->(k,v) { v } # I set the return value
expect(l).to receive(:call).once
x.method(&l)
# call is not called

如果转换为块,我如何检查l是否被执行?

1 个答案:

答案 0 :(得分:0)

我找到的解决方案是创建另一个从原始调用内部调用并返回原始值的lambda。像这样:

x = ->(v) { v }
l = ->(k,v) { x.call(k, v) }
expect(x).to receive(:call)

Whoala