【问题标题】:RSpec3 Mock Argument Expectation - With &block?RSpec3 模拟参数期望 - 使用 &block?
【发布时间】:2014-11-21 06:19:20
【问题描述】:

我有一个接收块的方法,并将它委托给另一个方法。真的很简单:

def self.build(&block)
  Builder.build(&block)
end

我希望 RSpec (v3) 测试接收到的块是否已传递给新方法。我的测试目前看起来像:

describe ".build" do
  it "delegates to Builder" do
    block = -> {}
    expect(App::Builder).to receive(:build).with(&block)
    described_class.build(&block)
  end
end

但是 RSpec 给了我一个 ArgumentError: `with` 必须至少有一个参数。使用 `no_args` 匹配器设置不接收参数的期望。有没有办法让 RSpec 期待一个带有特定块的方法调用?

【问题讨论】:

    标签: ruby rspec rspec3


    【解决方案1】:

    您不能使用期望来测试特定块是否通过。您可以通过在其中添加代码来检查代码是否运行,例如:

    describe ".build" do
      it "delegates to Builder" do
        block_is = double('block')
        block = -> {
          block_is.run
        }
    
        expect(App::Builder).to receive(:build).and_yield
        expect(block_is).to receive(:run)
    
        described_class.build(&block)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2019-11-08
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多