存根文件是否存在?在RSpec中



我想测试以下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?已被弃用并从文档中删除,但我想它仍然。。。存在。

相关内容

  • 没有找到相关文章

最新更新