RSpec "allow"以静默方式终止"it"块



我有一个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,而是在我的一个类上使用,但效果是一样的:当我运行此代码时,会打印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(请注意下划线而不是空格(。

最新更新