2

我正在更新一个 gem 以确保它与新版本的 bitly 和 rspec gem 一起工作,但我遇到了一个奇怪的问题。

当我运行guard以确保新 gem 的所有测试都通过时,我得到一个 TypeError;但是,如果我直接运行我的测试套件,rspec它们都通过并且不会抛出错误。

如果你想查看整个 shebang,我的代码可以在GitHub上找到。

通过挖掘,我看到有人建议将类包装在自己的模块中,以防止类名发生冲突,但由于它与 just 一起工作正常rspec,我希望我不需要添加另一层。

这是类型错误:

/Users/jstim/Documents/Programming/Ruby/uncoil/lib/uncoil.rb:6:in '':Uncoil 不是
来自 /Users/jstim/Documents/Programming/Ruby/uncoil/spec/uncoil_spec的类(TypeError) .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'
from /Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/ rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:in 'block in load_spec_files'
from /Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core -2.8.0/lib/rspec/core/configuration.rb:698:在
来自 /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'
from /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:在 /Users/jstim/.rvm/gems/ruby-1.9 的“运行”
中。 2-p290/gems/rspec-core-2.8.0/lib/rspec/core/runner.rb:10:in '自动运行中的块'

让我知道是否可以包含其他代码来提供帮助。谢谢!

4

1 回答 1

6

问题是,在“lib/uncoil”中,您定义class Uncoil但在“lib/uncoil/version”中定义module Uncoil. 如果版本被加载,将会发生冲突,因为您试图重新打开一个实际上是模块的类(反之亦然,取决于哪个首先加载)。

我假设当你运行它时rspec spec它根本不使用捆绑程序(潜在问题,顺便说一句,因为你的依赖项没有被管理,所以你应该总是这样做bundle exec rspec spec),所以它永远不会加载 .gemspec,这是唯一的地方您需要版本文件。大概是 Bundler 加载 gemspecs,然后加载版本文件,导致冲突。如果您之前没有遇到过这种情况,我猜您的依赖项之一(可能是guard-rspec)已更改为在较新版本中加载 Bundler。

您可以考虑在 gemspec 中指定依赖项的版本。

于 2012-01-09T01:55:15.193 回答