27 votes

Échec RSpec: impossible de trouver la table après la migration ...?

J'ai un nu rails 3 app avec un modèle, généré à l'aide d' rails g model User.

J'ai ajouté une usine (à l'aide d' factory_girl_rails):

Factory.define :user do |f|
  f.email "test@test.com"
  f.password "blah"
  f.password_confirmation "blah"
  f.display_name "neezer"
end

Puis j'ai ajouté un test:

require 'spec_helper'

describe User do

  subject { Factory :user }

  it "can be created from a factory" do
    subject.should_not be_nil
    subject.should be_kind_of User
  end

end

Puis-je migrer ma base de données à l'aide de rake db:migrate.

Puis-je exécuter le test à l'aide de rspec spec, et le test échoue avec le suivant:

Failures:

  1) User can be created from a factory
     Failure/Error: subject { Factory :user }
     ActiveRecord::StatementInvalid:
       Could not find table 'users'
     # ./spec/models/user_spec.rb:5:in `block (2 levels) in <top (required)>'
     # ./spec/models/user_spec.rb:8:in `block (2 levels) in <top (required)>'

Je suis confondu, car je viens de migrer ma base de données, et mon schema.db le fichier reflète qu'il y a une table des utilisateurs présents, donc, ce qui donne?

Je sais que c'est une question de débutant, mais à se taper la tête contre un mur ne fonctionne pas...

factory_girl (1.3.3)
factory_girl_rails (1.0.1)
rails (3.0.5)
rspec-rails (2.5.0)
sqlite3 (1.3.3)

75voto

Spyros Points 13741

Essayez d'exécuter

 rake db:test:prepare
 

Cela devrait corriger vos tests db.

2voto

Arnold Roa Points 563

Le point ici est que, rspec commande ne permet pas d'exécuter des migrations sur votre base de données de test. et rake db:migrate ne fonctionne migrations dans votre environnement actuel, probablement development. D'autres de l'environnement comme production et test se termine sans avoir ces changements.

Vous pouvez l'exécuter

rake spec

Préparer votre essai db (chute et de créer à l'aide de schema.rb) et d'exécuter tous les tests.

Comme l'autre réponse suggéré ceci:

rake db:test:prepare

Sera également l'installation de vos tests db, mais vous devez exécuter la rspec de commande après que, si, personnellement, je préfère la première option.

0voto

Sachin Singh Points 2762

essayez ceci:

 For rails version > 4.1+ this solution will work as the current scenario.

but in Rails 4.1+, rake db:test:prepare is deprecated.
 

essayez d'utiliser

 rake db:migrate RAILS_ENV=test (it will work for all version of rails)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X