RSpec "allow" 静默终止 "it" 块
RSpec "allow" silently terminates "it" block
我有一个这样的 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
当然在我自己的测试中,我没有在 String
上使用 allow
,而是在我的 类 上使用 allow
,但效果是一样的:当我 运行 这段代码 BEFORE 被打印出来,但是 AFTER 没有被打印出来(也没有执行任何在 allow
。效果就好像 allow
会终止测试。没有错误消息;RSpec 只是说“1 个示例,0 个失败”。
其他值得一提的事情:
RSpec mocking 是用 mocks.verify_partial_doubles = true
配置的,但效果是一样的,取决于我们是用 allow
指定现有方法还是(如我的示例)不存在的。
警告已打开,config.warnings = true
。
知道为什么 allow
会出现这种行为吗?
你有一行:
allow(String).to receive(:broken?).and return(false)
这调用allow(String).to(receive(:broken?).and(return(false)))
因此您调用 return
关键字静默结束示例。
您应该调用 and_return
而不是 and return
(注意下划线而不是 space)。
我有一个这样的 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
当然在我自己的测试中,我没有在 String
上使用 allow
,而是在我的 类 上使用 allow
,但效果是一样的:当我 运行 这段代码 BEFORE 被打印出来,但是 AFTER 没有被打印出来(也没有执行任何在 allow
。效果就好像 allow
会终止测试。没有错误消息;RSpec 只是说“1 个示例,0 个失败”。
其他值得一提的事情:
RSpec mocking 是用 mocks.verify_partial_doubles = true
配置的,但效果是一样的,取决于我们是用 allow
指定现有方法还是(如我的示例)不存在的。
警告已打开,config.warnings = true
。
知道为什么 allow
会出现这种行为吗?
你有一行:
allow(String).to receive(:broken?).and return(false)
这调用allow(String).to(receive(:broken?).and(return(false)))
因此您调用 return
关键字静默结束示例。
您应该调用 and_return
而不是 and return
(注意下划线而不是 space)。