对rubby和rspec来说是新的,我正在尝试测试一个打开并写入文件的类。
类名是simpleLogger
以下是生成错误的规范:
describe SimpleLogger do
...
context 'when using a file' do
require 'fakefs/spec_helpers'
before(:all) do
@path = 'my_file'
logger = SimpleLogger.new @path
logger.write "Hello, world!"
logger.close
end
...
it 'we expect the file to have a valid content' do
expect(File.read(@path)).to eq "Hello, world!\n"
end
end
end
生成的错误是:
Failure/Error: expect(File.read(@path)).to eq "Hello, world!\n"
expected: "Hello, world!\n"
got: ""
(compared using ==)
Diff:
@@ -1,2 +1 @@
-Hello, world!
文件存在于我的文件系统中,当我在一个独立的Ruby文件上测试一个简单的
puts Find.read("my_file")
时,我得到了预期的结果。我已经测试过了,没有
fakefs gem
为什么在一个规范中运行它不起作用?
除此之外,我不明白伪造文件的好处,因为它创建的文件是一样的。那为什么要用假货呢?
当它创建文件时,我应该在规范中删除它吗?
提前感谢;)
最佳答案
从documentation-看来您需要包括帮助程序来激活FakeFS
:FakeFS::SpecHelpers
为rspec示例组提供了一个简单的宏来打开和关闭fakefs。
要使用它,只需要“fakefs/spec\u helpers”,然后将fakefs::spechelpers包含到任何
希望在中使用伪造的示例组。例如:
require 'fakefs/spec_helpers'
describe "Some specs that deal with files" do
include FakeFS::SpecHelpers
...
end
默认情况下,包括FakeFS::SpecHelpers将在描述块中为每个示例运行。
如果只想对所有示例启用一次fakefs,则需要
包括fakefs::spechelpers::all。
或者,可以使用rspec在所有示例组中包含fakefs::spechelpers
规范帮助程序中的配置块:
require 'fakefs/spec_helpers'
Spec::Runner.configure do |config|
config.include FakeFS::SpecHelpers
end
如果您执行上述操作,那么在所有示例组中都将提供use_fakefs。
您还需要使用
before(:each)
而不是像许多单元测试助手一样,before(:all)
遵循单元测试隔离原则,其中一个测试的副作用不应影响另一个测试。这就是为什么每次测试之后,gem都会“重置”其容器的状态,并从中清除所有文件。