2011-06-02 4 views
8

J'ai hérité d'une vieille application Rails2.3. C'est très complexe et n'a aucun (choc, horreur) aucun test. Comme je suis habitué à rspec et concombre, je pensais commencer à travailler sur les spécifications et fonctionnalités définies pour la mise à jour éventuelle de Rails 3. Il est plus facile de mettre à niveau si je sais exactement ce qui échouera.pas un tel fichier à charger - rspec/matchers - rspec-rails, shoulda, concombre, usine fille, Rails2.3.10

De toute façon, j'ai trouvé très difficile de trouver des ressources sur Internet qui montrent comment configurer rspec, concombre, factory girl, et shoulda dans un environnement rails 2.3. Mon paquet est la suivante:

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 

Quand je vais courir

bundle exec rspec spec, 

je reçois le stacktrace suivant de 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 

recherche sur Google pour cette erreur fournit effroyablement quelques coups .. Je ne suis pas sûr de ce que j'ai fait de mal?

Retrait rspec-core donne:

bundle

spec exec rspec/modèles/announcement_spec.rb /Users/sys/.rvm/gems/[email protected]/gems/bundler-1.0 .14 ​​/ lib/bundler/rubygems_integration.rb: 143: dans `gem ': rspec-core ne fait pas partie de l'ensemble. Ajoutez-le à Gemfile. (Gem :: ChargeErreur)

contenu 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) 

Je me demande si cela est en conflit avec d'autres années rspec J'ai installé (j'ai une application Rails3 installé, aussi avec Bundler/rvm) ... Je ne sais pas pourquoi rspec est en cours d'exécution de opt/local/bin et non de l'ensemble, cependant ..

Répondre

11

je suis tombé sur ce même problème. Après avoir cherché toutes les commandes rspec binaires (plusieurs emplacements), j'ai réalisé tardivement que la branche 1.3.2 de RSPEC titrait son binaire "spec" et non "rspec". Donc, les commandes correctes étaient toujours "bundle spec spec spec/models/..." Mettre "rspec" signifiait que bundler ne trouvait pas dans mon rvm/gemset courant et cherchait dans tout mon chemin, arrivant finalement avec une copie/opt/local/bin ayant appartenu à une installation rspec2.x

Il est possible qu'un alias permette à rspec 1.3.2 de répondre également à la commande "rspec", mais ce n'était pas le cas pour moi. L'utilisation de "spec" était fiable à 100% pour éviter cet appel à rspec-core et à d'autres modules 2.x.

Merci pour la question et toutes les recherches ci-dessus. Charles

1

Il ressemble à rspec-core, qui est d'une version de rspec qui ne supporte que Rails 3, peut être le problème. Essayez de le désinstaller et de le retirer de votre Gemfile.

À titre de comparaison, voici une partie de notre Gemfile qui fonctionne bien pour 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   
+0

Si je supprime rspec-core, j'obtiens: /Library/Ruby/Gems/1.8/gems/bundler-1.0.14/lib/bundler/rubygems_integration.rb: 143: dans 'gem ': rspec-core ne fait pas partie du bundle. Ajoutez-le à Gemfile. (Gem :: LoadError) \t from /Users/sys/src/proj/rails/ruby/1.8/bin/rspec:18 –

+0

Je vais essayer de désinstaller toutes les gemmes rspec, en mettant seulement les 2 joyaux ci-dessus dans votre Gemfile, et installation du bundle en cours d'exécution. – Mori

+0

Toujours cause des problèmes. Cependant, maintenant il se plaint que le fichier est dans \t de/opt/local/bin/rspec: 18 ... quel est le contenu de votre fichier de ce script? –

1

Un bundle update rspec-rails a résolu ce problème pour moi sur rails 3.1.

Questions connexes