RSpec:如何testing一个方法是否被调用?

在编写RSpectesting时,我发现自己写了很多代码,看起来像这样,以确保在执行testing期间调用一个方法(为了争辩,让我们只是说我不能真正的询问状态因为该方法执行的操作不容易看到效果)。

describe "#foo" it "should call 'bar' with appropriate arguments" do called_bar = false subject.stub(:bar).with("an argument I want") { called_bar = true } subject.foo expect(called_bar).to be_true end end 

我想知道的是:有比这更好的语法吗? 我是否错过了一些时髦的RSpec迷人,将上述代码减less到几行? should_receive听起来应该这样做,但进一步阅读听起来像这不完全是什么。

 it "should call 'bar' with appropriate arguments" do expect(subject).to receive(:bar).with("an argument I want") subject.foo end 

在新的rspec expect语法,这将是:

 expect(subject).to receive(:bar).with("an argument I want") 

以下应该工作

 describe "#foo" it "should call 'bar' with appropriate arguments" do subject.stub(:bar) subject.foo expect(subject).to have_received(:bar).with("Invalid number of arguments") end end 

文档: https : //github.com/rspec/rspec-mocks#expecting-arguments