нет такого файла для загрузки rspec / matchers - rspec-rails, shoulda, cucumber, factory girl, Rails2.3.10

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

В любом случае, мне было очень трудно найти в Интернете ресурсы, которые показывают, как настроить rspec, cucumber, factory girl и shoulda в среде 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, 

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

/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

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

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

bundle exec rspec spec / models / announcement_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, а не из пакета, хотя ..


person Matt Rogish    schedule 02.06.2011    source источник


Ответы (3)


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

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

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

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

person Charles Forcey    schedule 21.06.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        
person Mori    schedule 02.06.2011
comment
Если я удалю rspec-core, я получу: /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/rubygems_integration.rb:143:in `gem ': rspec-core не является частью пучок. Добавьте его в Gemfile. (Gem :: LoadError) из /Users/sys/src/proj/rails/ruby/1.8/bin/rspec:18 - person Matt Rogish; 02.06.2011
comment
Я бы попробовал удалить все драгоценные камни rspec, поместив только 2 указанных выше драгоценных камня в свой Gemfile и запустив установку пакета. - person Mori; 02.06.2011
comment
По-прежнему вызывает проблемы. Однако теперь он жалуется, что файл находится в / opt / local / bin / rspec: 18 ... какое у вас содержимое файла этого сценария? - person Matt Rogish; 02.06.2011
comment
Чтобы убедиться, что вы используете правильные исполняемые файлы, используйте bundle exec, например bundle exec rake spec. - person Mori; 02.06.2011
comment
Вы знаете, было бы действительно полезно иметь сайт, на котором перечислены все зависимости для данной версии рельсов для различных сред гемов. Есть масса подобных вопросов, но очень мало однозначных ответов (многие ответы являются частичными и пропускают различные зависимости). К сожалению, сборщик не всегда может подобрать вам подходящие версии! - person rholmes; 25.08.2011

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

person Charlie Bowman    schedule 23.03.2012