É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)
29
demandé sur neezer 2011-03-10 21:53:54

3 réponses

Essayez d'exécuter

rake db:test:prepare

Cela devrait corriger votre dB de tests.

83
répondu Spyros 2011-03-10 18:55:11

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.

2
répondu Arnold Roa 2017-05-23 12:17:05

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)
0
répondu Sachin Singh 2014-08-04 09:53:28