我有一个方法,它接收一个块,并将其委托给另一个方法。非常简单:
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期待一个带有特定块的方法调用?
发布于 2014-11-21 14:30:11
不能使用expectation来测试是否传递了特定的块。您可以通过在代码中添加代码来检查代码是否正在运行,例如:
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
endhttps://stackoverflow.com/questions/27055295
复制相似问题