Échec RSpec: impossible de trouver la table après la migration...?
J'ai une application naked rails 3 avec un modèle, généré en utilisant rails g model User
.
J'ai ajouté une usine (en utilisant 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
Ensuite, 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
Ensuite, jemigrer ma base de données en utilisant rake db:migrate
.
Ensuite, j'exécute le test en utilisant rspec spec
, et le test échoue avec ce qui suit:
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 confus, parce que je viens de migrer ma base de données, et mon fichier schema.db
reflète qu'il y a une table d'utilisateurs présente, alors qu'est-ce qui donne?
Je le sais est une question débutant, mais frapper ma 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)
3 réponses
Essayez d'exécuter
rake db:test:prepare
Cela devrait corriger votre dB de tests.
Le point ici est que la commande rspec
n'exécute pas les migrations sur votre base de données de test. et rake db:migrate
exécute uniquement les migrations dans votre environnement actuel, probablement development
. D'autres environnements comme production
et test
se terminent sans avoir ces changements.
, Vous pouvez exécuter
rake spec
Cela préparera votre base de données de test (supprimer et créer en utilisant schema.rb
) et exécutera tous les tests.
, Comme l'autre réponse suggéré ceci:
rake db:test:prepare
Configurera également votre base de données de test, mais vous devez exécutez la commande rspec après cela, donc, personnellement, je préfère la première option.
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)