你如何导致期望停止RSpec中的执行?

问题描述:

我想测试一个类接收RSpec的一类方法调用:你如何导致期望停止RSpec中的执行?

describe MyObject do 
    it "should create a new user" do 
    expect(User).to receive(:new) 
    MyObject.new.doit 
    end 
end 

class MyObject 
    def doit 
    u = User.new 
    u.save 
    end 
end 

的问题是,期望不停止执行。它只是存根类方法.doit并继续执行。

期望的效果是确保User.new返回nil。因此,当我们到达下一行即User.save时,它会失败,因为没有用户对象要拨打.save

我希望在RSpec期望得到满足时立即停止执行 - 我该怎么做?

NB

这仅仅是一个说明性的例子 - 当一个expect to change将为User.new工作,它不是这个实际的代码,我需要根据你的测试说明测试

有这个and_call_original一个伟大的方法:

expect(User).to receive(:new).and_call_original 
+0

你美容zishe - 这是完美的 –

+0

希望它有效,我还没有试过 – zishe

+1

我只是做了,它的作品完美 - ty –

,你”重新测试该纪录被创造了,在这种情况下,我建议你这样做:

expect { 
    MyObject.new.doit 
}.to change{User.count} 

,或者如果你想确保它不仅创造一个:

expect { 
    MyObject.new.doit 
}.to change{User.count}.by(1)  
+0

我选择的例子只是一个例子。我同意你说的是我想检查一个用户是否被创建,但我实际上想测试一种不能用这种技术测试的不同方法。我真的需要测试一个类的方法叫做 –