我有一个接收块的方法,并将其委托给另一个方法。真的很简单:
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期望使用特定块进行方法调用?
答案 0 :(得分:2)
您无法使用期望来测试是否传递了特定块。您可以通过在其中添加代码来检查代码运行,例如:
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