【问题标题】:rspec How to test if my yield is calledrspec 如何测试我的产量是否被调用
【发布时间】:2017-08-03 17:14:08
【问题描述】:

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

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

我的测试是这样写的:

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

问题是我需要分配的@attr 才能完全完成我的测试。而 spec 生成的块 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被转换为块,我如何检查是否执行?

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

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

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

    哇啦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多