对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都会“重置”其容器的状态,并从中清除所有文件。

10-04 21:57