2014-11-21 66 views
2

我有一个方法接收一个块,并委托给另一个方法。真的很简单:RSpec3模拟参数期望 - With&block?

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

回答

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