4

我正在尝试使用FakeFS,但在以下情况下不断收到未初始化的常量错误require 'fakefs'

C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/file.rb:26:in `<class:File>': uninitialized constant File::NOCTTY (NameError)

我最初在 RubyMine 中工作,但为了隔离问题,我编写了一个简单的 hello world 脚本并从命令行运行它,但仍然得到相同的错误。这是那个脚本:

require 'rubygems'
gem 'fakefs'
require 'fakefs'

puts "Hello Cleveland!"

这是错误和随附的堆栈跟踪:

>ruby foo.rb
C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/file.rb:26:in `<class:File>': uninitialized constant File::NOCTTY (NameError)
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/file.rb:4:in `<module:FakeFS>'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/file.rb:3:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs/safe.rb:9:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/fakefs-0.3.1/lib/fakefs.rb:1:in `<top (required)>'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from foo.rb:3:in `<main>'

我通过 RubyMine 安装了 fakefs gem。我正在使用 Ruby 1.9 在 Windows 上工作。有任何想法吗?

4

1 回答 1

3

这是因为 Windows 没有NOCTTYSYNC标志。您可以将此方法添加到base.rb文件中:

def RealFile.const_missing const
  const_set const, 42
end

真的,我不知道它将来会不会导致任何问题,但您至少可以运行您的脚本。我认为你应该在github 上写下这个

有一个带有一些 Windows 修复的 fork(这家伙评论了所有标志):https ://github.com/vertiginous/fakefs

于 2011-04-17T19:58:24.633 回答