нет такого файла для загрузки - rspec / matchers - rspec-rails, musta, cucumber, factory girl, Rails2.3.10 - PullRequest
8 голосов
/ 02 июня 2011

Я унаследовал старое приложение Rails2.3. Это очень сложно и не имеет (шок, ужас) никаких тестов вообще. Я привык к rspec и cucumber, поэтому я подумал, что начну работать над определением спецификаций и функций для возможного (далекого) обновления до Rails 3. Обновление легче, если я точно знаю, что не получится.

В любом случае, мне было очень трудно найти в Интернете ресурсы, которые показывают, как настроить rspec, cucumber, factory girl и musta в среде rails 2.3. Мой пакет выглядит следующим образом:

source "http://rubygems.org"

# Production gems
gem "rails",    "2.3.10"
gem "nokogiri", "1.4.4"
gem "mysql",    "~> 2.8.1"

group :development do
  # bundler requires these gems in development
  gem 'rspec',          '1.3.2'
  gem 'rspec-core',     '2.5.2'
  gem 'rspec-rails',    '1.3.4'
end

group :test do
  # bundler requires these gems while running tests
  gem 'cucumber-rails', '0.4.1'
  gem 'factory_girl'
  gem 'shoulda',        '2.11.3'
  gem 'shoulda-matchers'
end

Когда я иду бежать

bundle exec rspec spec, 

Я получаю следующую трассировку стека от musta:

/Users/sys/src/proj/rails/ruby/1.8/gems/shoulda-2.11.3/lib/shoulda/integrations/rspec2.rb:8: no such file to load -- rspec/matchers (MissingSourceFile)
    from /Users/sys/src/proj/vendor/rails/activesupport/lib/active_support/dependencies.rb:184:in `require'
    from /Users/sys/src/proj/vendor/rails/activesupport/lib/active_support/dependencies.rb:184:in `require'
    from /Users/sys/src/proj/rails/ruby/1.8/gems/shoulda-2.11.3/lib/shoulda.rb:4
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:68:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:68:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:66:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:66:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:55:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/runtime.rb:55:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler.rb:120:in `require'
    from /Users/sys/src/proj/config/boot.rb:119:in `load_gems'
    from /Users/sys/src/proj/config/../vendor/rails/railties/lib/initializer.rb:164:in `process'
    from /Users/sys/src/proj/config/../vendor/rails/railties/lib/initializer.rb:113:in `send'
    from /Users/sys/src/proj/config/../vendor/rails/railties/lib/initializer.rb:113:in `run'
    from /Users/sys/src/proj/config/environment.rb:12
    from /Users/sys/src/proj/spec/spec_helper.rb:4:in `require'
    from /Users/sys/src/proj/spec/spec_helper.rb:4
    from /Users/sys/src/proj/spec/models/announcement_spec.rb:1:in `require'
    from /Users/sys/src/proj/spec/models/announcement_spec.rb:1
    from /Users/sys/src/proj/rails/ruby/1.8/gems/rspec-core-2.5.2/lib/rspec/core/configuration.rb:386:in `load'
    from /Users/sys/src/proj/rails/ruby/1.8/gems/rspec-core-2.5.2/lib/rspec/core/configuration.rb:386:in `load_spec_files'
    from /Users/sys/src/proj/rails/ruby/1.8/gems/rspec-core-2.5.2/lib/rspec/core/configuration.rb:386:in `map'
    from /Users/sys/src/proj/rails/ruby/1.8/gems/rspec-core-2.5.2/lib/rspec/core/configuration.rb:386:in `load_spec_files'
    from /Users/sys/src/proj/rails/ruby/1.8/gems/rspec-core-2.5.2/lib/rspec/core/command_line.rb:18:in `run'
    from /Users/sys/src/proj/rails/ruby/1.8/gems/rspec-core-2.5.2/lib/rspec/core/runner.rb:55:in `run_in_process'
    from /Users/sys/src/proj/rails/ruby/1.8/gems/rspec-core-2.5.2/lib/rspec/core/runner.rb:46:in `run'
    from /Users/sys/src/proj/rails/ruby/1.8/gems/rspec-core-2.5.2/lib/rspec/core/runner.rb:10:in `autorun'
    from /Users/sys/src/proj/rails/ruby/1.8/bin/rspec:19

Поиск этой ошибки дает пугающе мало хитов ... Я не уверен, что сделал неправильно?

Удаление rspec-core дает:

комплект exec rspec spec / models / announce_spec.rb /Users/sys/.rvm/gems/ree-1.8.7-2011.03@proj/gems/bundler-1.0.14/lib/bundler/rubygems_integration.rb:143:in `gem ': rspec-core не является частью расслоение Добавьте его в Gemfile. (Gem :: LoadError)

содержимое opt / local / bin / rspec

cat /opt/local/bin/rspec 
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rspec-core' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

gem 'rspec-core', version
load Gem.bin_path('rspec-core', 'rspec', version)

Интересно, конфликтует ли это с другими установленными мною rspec (у меня установлено приложение Rails3, также с bundler / rvm) ... Не уверен, почему в rspec заканчивается opt / local / bin, а не пучок, хотя ..

Ответы [ 3 ]

11 голосов
/ 21 июня 2011

Я столкнулся с этой же проблемой. После поиска всех двоичных команд rspec (в нескольких местах) я запоздало понял, что ветка RSPEC 1.3.2 называет свою двоичную «спецификацию», а не «rspec».

Таким образом, правильные команды всегда были "bundle exec spec spec / models / ...". Установка "rspec" означала, что bundler не смог найти его в моем текущем rvm / gemset и продолжил поиск по всему моему пути, в итоге придя копия / opt / local / bin, принадлежащая установке rspec2.x.

Возможно, псевдоним позволяет rspec 1.3.2 также отвечать на команду "rspec", но это не так для меня. Использование «spec» было на 100% надежно, чтобы избежать вызова для rspec-core и других модулей 2.x.

Спасибо за вопрос и все исследования выше. Charles

1 голос
/ 23 марта 2012

A bundle update rspec-rails исправил эту проблему для меня на рельсах 3.1.

1 голос
/ 02 июня 2011

Похоже, что rspec-core из версии rspec, которая поддерживает только Rails 3, может быть проблемой.Попробуйте удалить это и удалить из вашего Gemfile.

Для сравнения, вот раздел из нашего Gemfile, который отлично работает для Rails 2.3:

group :development, :local, :test do                                             
  gem "rspec",              "= 1.3.1"                                            
  gem "rspec-rails",        "= 1.3.3"                                            
  gem "factory_girl",       "= 1.3.3"                                            
  gem "webrat",             "= 0.7.3"                                            
  gem "shoulda",            "= 2.11.3"                                           
end        
...