2011-03-10 15 views
28

Tengo una aplicación de rieles desnudos 3 con un modelo, generada usando rails g model User.Error de RSpec: no se pudo encontrar la tabla después de la migración ...?

He añadido una fábrica (utilizando factory_girl_rails):

Factory.define :user do |f| 
    f.email "[email protected]" 
    f.password "blah" 
    f.password_confirmation "blah" 
    f.display_name "neezer" 
end 

Luego he añadido una prueba:

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 

Entonces migran mi base de datos usandorake db:migrate.

Luego ejecutar la prueba usando rspec spec, y la prueba se produce el siguiente:

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

Estoy confundido, porque me acaba de migrar mi base de datos y el archivo de schema.db refleja que existe un usuarios mesa presente, entonces ¿qué da?

Sé que esto es una pregunta principiante, pero golpeando mi cabeza contra una pared no está funcionando ...

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

Respuesta

82

intenta ejecutar

rake db:test:prepare 

Esto debería solucionar sus pruebas db.

+0

Qué necesito para ejecutar cada vez que hago nuevas migraciones, o sólo lo hace simplemente "Manos a la Obra" la base de datos de prueba? – neezer

+1

solo una vez, es como db: migrar, de hecho siempre lo pongo en una tarea personalizada que hago que migra, carga accesorios, prueba db y más. – Spyros

+1

Cualquier idea de qué hacer si rake db: prueba: prepare * no * soluciona el problema? :( – Raphael

2

El punto aquí es que el comando rspec no ejecuta migraciones en su base de datos de prueba. y rake db:migrate solo ejecuta migraciones en su entorno actual, probablemente development. Otros entornos como production y test finalizan sin tener esos cambios.

Puede ejecutar

rake spec 

que prepararán a su base de datos de prueba (gota y hacer creaciones utilizando schema.rb) y ejecutar todas las pruebas.

Como the other answer sugirió, esto:

rake db:test:prepare 

también configurar su prueba db, pero hay que ejecutar el comando rspec después de eso, por lo que, personalmente prefiero la primera opción.

0

probar esto:

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

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

trate de usar

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

Creo que sería más útil para el OP y otros visitantes, cuando agregaste algunas explicaciones para tu intención. – reporter

+0

@reporter sure. –

+0

@reporter, compruebe la respuesta actualizada. –

Cuestiones relacionadas