为什么FakeFS打破了RSpec?

时间:2016-05-17 15:24:58

标签: ruby rspec

test_spec.rb:(来自FakeFS example

require 'fakefs/spec_helpers' 

describe 'Test' do
  include FakeFS::SpecHelpers
  it 'should fail' do
    expect(1).to eq(2)
  end
end

describe 'Test2' do
  it 'should fail' do
    expect(1).to eq(2)
  end
end

rspec spec / test_spec.rb 为第一次测试返回superclass mismatch for class File,在第二种情况下返回正常expected: 2 got: 1。匹配器更改(例如be_kind_of(String))不会影响结果。为什么会发生这种情况,如何解决?

ruby​​ -v

ruby 2.4.0dev (2016-03-19 trunk 54188) [x86_64-linux]

2 个答案:

答案 0 :(得分:2)

我刚刚遇到这个问题,接受的答案对我没有帮助。

但我最终通过在spec_helper.rb的顶部添加以下行来解决问题:

require 'pp'

我有一个.rspec文件,其中包含以下行,以确保始终加载spec_helper:

--require spec_helper

FakeFS自述文件中记录了您需要在pp之前fakefs才能避免此问题,但我自己并不需要pp。它必须由我使用的其他一些宝石隐含地要求*。

因此,在pp之前明确要求fakefs,我的规格现在可以按原样运行。

*我怀疑RSpec使用pp来处理漂亮的打印错误消息,因为我可以在行expect(true).to eq false

中导致异常

答案 1 :(得分:0)

感谢@ d.g了解link对于fakefs的问题。有用的东西:

<强>的Gemfile

gem 'fakefs', require: 'fakefs/safe'

<强>规格/ spec_helper.rb

require 'fakefs/spec_helpers'

RSpec.configure do |config|
  config.include FakeFS::SpecHelpers, fakefs: true
end

<强> test_spec.rb

require_relative 'spec_helper.rb'

describe 'Test', fakefs: true do
  it 'should fail' do
    expect(1).to be_kind_of(String)
  end
end