Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby RSpec3模拟参数预期-带&;块_Ruby_Rspec_Rspec3 - Fatal编程技术网

Ruby RSpec3模拟参数预期-带&;块

Ruby RSpec3模拟参数预期-带&;块,ruby,rspec,rspec3,Ruby,Rspec,Rspec3,我有一个方法接收一个块,并将其委托给另一个方法。非常简单: 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).wi

我有一个方法接收一个块,并将其委托给另一个方法。非常简单:

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期望一个具有特定块的方法调用?

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

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