Ruby: спецификации проходят при непосредственном запуске, TypeError при запуске в Guard - PullRequest
2 голосов
/ 09 января 2012

Я обновляю гем, чтобы убедиться, что он работает с новыми версиями гемов bitly и rspec, и у меня возникла странная проблема.

Когда я запускаю guard, чтобы убедиться, что всетесты проходят с новым гемом, я получаю TypeError;однако, если я запускаю свой тестовый набор напрямую, просто rspec они все проходят и не выдают ошибку.

Мой код доступен на GitHub , если вы хотите увидеть весь шебанг.

Из копания я видел людей, предлагающих обернуть класс внутри его собственного модуля, чтобы не дать им конфликтовать именам классов, но, поскольку он работает нормально только с rspec, я надеюсь, что я не наденуне нужно добавлять еще один слой.

Вот ошибка типа:

/ Users / jstim / Documents / Programming / Ruby / uncoil / lib / uncoil.rb: 6: in '': Uncoil не является классом (TypeError)
из /Users/jstim/Documents/Programming/Ruby/uncoil/spec/uncoil_spec.rb:1:in' require_relative '
из / Users / jstim / Documents /Программирование / 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 в load_spec_files'
из /Users/jstim/.rvm/gems/ruby-1.9.2-p290/gems/rspec-core-2.8.0/lib/rspec/core/configuration.rb:698:в '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 '
from /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 'блок в автозапуске'

Дайте мне знать, если я могу добавить дополнительный код, чтобы помочь.спасибо!

1 Ответ

6 голосов
/ 09 января 2012

Проблема в том, что в "lib / uncoil" вы определяете class Uncoil, а в "lib / uncoil / version" вы определяете module Uncoil. Если версия загружается, возникает конфликт в том, что вы пытаетесь открыть класс, который на самом деле является модулем (или наоборот, в зависимости от того, который загружается первым).

Я предполагаю, что когда вы запускаете rspec spec, он вообще не использует компоновщик (потенциальная проблема, кстати, поскольку вашими зависимостями не управляют, поэтому вы всегда должны делать bundle exec rspec spec), поэтому он никогда не загружается .gemspec, единственное место, где вам требуется файл версии. Предположительно, Bundler загружает gemspecs, который, в свою очередь, загружает файл версии, вызывая конфликт. Если вы не испытывали этого раньше, я бы предположил, что одна из ваших зависимостей (вероятно, guard-rspec) была изменена для загрузки Bundler в более новой версии.

Возможно, вы захотите указать версии на зависимостях в gemspec.

...