我有这样的RSpec测试:
RSpec.describe 'outer' do
describe 'inner' do
context 'context' do
it 'my test' do
puts ":::: BEFORE"
allow(String).to receive(:broken?).and return(false)
puts ":::: AFTER"
expect(0).to eq(1) # Won't be executed
end
end
end
end
当然,在我自己的测试中,我没有在allow
上使用String
,而是在我的一个类上使用了,但是效果是一样的:运行此代码时,在打印之前,但不打印之后(allow
之后也不会执行任何其他操作。效果就像allow
终止测试,没有错误消息; RSpec仅显示“ 1个示例,0个失败”。
其他值得一提的东西:
RSpec模拟是使用mocks.verify_partial_doubles = true
配置的,但是效果是相同的,这取决于我们用allow
指定现有方法还是(例如在我的示例中)不存在的方法。 / p>
使用config.warnings = true
打开警告。
您知道为什么allow
可能会显示此行为吗?
答案 0 :(得分:4)
您有一行:
allow(String).to receive(:broken?).and return(false)
此呼叫allow(String).to(receive(:broken?).and(return(false)))
因此,您呼叫return
关键字以无提示方式结束示例。
您应该致电and_return
而不是and return
(注意,请使用下划线而不是空格)。