我正在更新一个宝石,以确保它适用于新版本的bitly和rspec宝石,我遇到了一个奇怪的问题。
当我运行guard
以确保所有测试都通过新gem时,我得到一个TypeError;但是,如果我直接使用rspec
运行我的测试套件,它们都会通过并且不会抛出错误。
如果你想查看整个shebang,我的代码可以在GitHub上找到。
从挖掘开始,我看到人们建议将类包装在自己的模块中以防止类名冲突,但是因为它只用rspec
工作正常,我希望我不要需要添加另一层。
这是TypeError:
/Users/jstim/Documents/Programming/Ruby/uncoil/lib/uncoil.rb:6:in'':Uncoil不是一个类(TypeError)
来自/Users/jstim/Documents/Programming/Ruby/uncoil/spec/uncoil_spec.rb:1:''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'load in 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'map'
来自/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'block in autorun'
如果我可以提供其他代码来帮助我,请告诉我们。谢谢!
答案 0 :(得分:6)
问题是在“lib / uncoil”中定义class Uncoil
但在“lib / uncoil / version”中定义module Uncoil
。如果加载了版本,则会发生冲突,因为您尝试重新打开实际上是模块的类(反之亦然,具体取决于首先加载的类)。
我认为当你运行rspec spec
时它根本不使用bundler(潜在的问题,顺便说一句,因为你的依赖关系没有被管理,所以你应该总是bundle exec rspec spec
),所以它永远不会加载.gemspec,这是你需要版本文件的唯一地方。据推测,Bundler会加载gemspecs,而gemspecs又会加载版本文件,从而导致冲突。
如果您之前没有遇到过这种情况,我猜您的某个依赖项(可能是guard-rspec)已更改为在较新版本中加载Bundler。
您可以考虑在gemspec中指定依赖项的版本。