我正在更新一个gem,以确保它与bitly和rspec宝石的新版本一起工作,我遇到了一个奇怪的问题。
当我运行guard
以确保所有测试都通过了新的gem时,我就会得到一个TypeError;但是,如果我只使用rspec
直接运行测试套件,它们都会通过,并且不会抛出错误。
我的代码可以在GitHub上使用,如果您想看到整个代码的话。
通过深入研究,我看到人们建议将类封装在自己的模块中,以防止类名冲突,但由于它只适用于rspec
,所以我希望不需要添加另一个层。
这里是TypeError:
/Users/jstim/Documents/Programming/Ruby/uncoil/lib/uncoil.rb:6:in '':解线圈不是一个类(TypeError) 来自/Users/jstim/Documents/Programming/Ruby/uncoil/spec/uncoil_spec.rb:1:in 'require_relative‘ 来自/Users/jstim/Documents/Programming/Ruby/uncoil/spec/uncoil_spec.rb:1:in '‘ 从/Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in 'load‘ 来自/Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in 'block load_spec_files‘ 来自/Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in‘地图’ 来自/Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in 'load_spec_files‘ 来自/Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/command_line.rb:22:in 'run‘ 来自/Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:80:in 'run_in_process‘ 来自/Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:69:in 'run‘ 来自/Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:10:in‘自动运行区’
让我知道我是否可以包括额外的代码,以帮助解决。谢谢!
发布于 2012-01-09 01:55:15
问题是,在“lib/un线圈”中,您定义了class Uncoil
,而在“lib/un线圈/version”中,您定义了module Uncoil
。如果加载了版本,就会发生冲突,因为您试图重新打开一个实际上是模块的类(反之亦然,这取决于哪个类首先加载)。
我假设当您运行rspec spec
时,它根本不使用绑定器(顺便说一句,由于您的依赖项没有被管理,所以您应该始终执行bundle exec rspec spec
),所以它永远不会加载.gemspec,这是您唯一需要版本文件的地方。想必,Bundler会加载the规范,然后加载版本文件,从而导致冲突。如果您以前没有经历过这种情况,我猜您的一个依赖项(可能是守护-rspec)在新版本中被更改为load。
您可以考虑在the规范中指定依赖项的版本。
https://stackoverflow.com/questions/8782736
复制相似问题