你如何导致期望停止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工作,它不是这个实际的代码,我需要根据你的测试说明测试
答
,你”重新测试该纪录被创造了,在这种情况下,我建议你这样做:
expect {
MyObject.new.doit
}.to change{User.count}
,或者如果你想确保它不仅创造一个:
expect {
MyObject.new.doit
}.to change{User.count}.by(1)
+0
我选择的例子只是一个例子。我同意你说的是我想检查一个用户是否被创建,但我实际上想测试一种不能用这种技术测试的不同方法。我真的需要测试一个类的方法叫做 –
你美容zishe - 这是完美的 –
希望它有效,我还没有试过 – zishe
我只是做了,它的作品完美 - ty –