我想测试以下ruby代码的else
分支:
SCHEMA_SOURCE = if File.exist? SCHEMA_FILENAME
SCHEMA_FILENAME
else
ContentfulApi::Http
end
我找不到一种方法来模拟文件SCHEMA_FILENAME
的不存在。以下是我尝试过的测试的简化版本,以及错误:
it 'fails to find file when it does not exist' do
allow(File).to receive(:exists?).and_return(false)
expect(File.exist?(ContentfulApi::SCHEMA_FILENAME)).to be_falsey
end
it 'fails to find file when it does not exist' do
allow(File).to receive(:exists?).with(ContentfulApi::SCHEMA_FILENAME)
.and_return(false)
expect(File.exist?(ContentfulApi::SCHEMA_FILENAME)).to be_falsey
end
这两个都以错误失败
预期:假值
得到:真
it 'fails to find file when it does not exist' do
File.stub(:exists?) { false }
expect(File.exist?(ContentfulApi::SCHEMA_FILENAME)).to be_falsey
end
it 'fails to find file when it does not exist' do
File.stub!(:exists?).with(ContentfulApi::SCHEMA_FILENAME)
.and_return(false)
expect(File.exist?(ContentfulApi::SCHEMA_FILENAME)).to be_falsey
end
这两个都以错误失败
文件的未定义方法"stub":类
我的前两次尝试遵循了Method Stubs文档中的示例,尽管该文档中没有探讨类和对象之间的区别。(尽管类在Ruby中是对象,对吧?(
后两次尝试遵循旧文档。
即使文件确实存在,我应该如何存根File.exist? SCHEMA_FILENAME
以使其返回false
?
注意:这些类似问题中的方法不起作用:
- rspec是否要截断多个File.exists?电话
- Rspec——需要存根在另一个文件中调用的File.open
- 模型的rspec未定义方法存根
- 如何重置对模拟类方法的期望
- 如何使用rspec截取特定文件
- 无法使用Rspec截断事物
- rspec3-stub a类方法
您正在嘲笑File.exists?
并调用File.exist?
。
请注意,如果您设置了verify_partial_doubles
,并且您应该设置,RSpec将不允许模拟不存在的方法。
RSpec.configure do |config|
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
RSpec.describe File do
it 'cannot mock a method whcih does not exist' do
allow(File).to receive(:dslkfjalk).and_return(true)
end
end
Failures:
1) File cannot mock a method whcih does not exist
Failure/Error: allow(File).to receive(:dslkfjalk).and_return(true)
File does not implement: dslkfjalk
但CCD_ 8同时具有CCD_ 9和CCD_。File.exists?
已被弃用并从文档中删除,但我想它仍然。。。存在。