2009-10-10 14 views
9

rake test:units falla en mi aplicación actual, porque faltan los datos necesarios de las luminarias.La comprobación de la unidad de rieles no carga las luminarias

Si estoy cargando los dispositivos manualmente a través del rake db:fixtures:load RAILS_ENV=test las pruebas de la unidad están funcionando, pero el rastrillado purga la base de datos de prueba.

Mi test_helper incluye fixtures :all y mis pruebas heredan de él, pero las luminarias simplemente no se están cargando.

¡Estoy un poco despistado en este momento y realmente podría necesitar ayuda!

Gracias y adiós,

Joe

edición: He intentado mucho y creo que tiene que ver con algunos valores de entorno o plugins utilizados en este proyecto. ¿Alguien sabe dónde leer sobre qué archivos se cargan para el entorno de prueba?

+1

Por lo que vale, me encontré con un problema similar, excepto que estaba definiendo una constante que dependía de un registro de la base de datos. Se movió esa constante a una variable de instancia y booya. Parece que las constantes se definen antes de que los dispositivos se carguen también. Aclamaciones. –

Respuesta

3

que finalmente encontraron el problema, a pesar de las soluciones es una especie de hacky.

Un complemento se basa en que hay algunos datos en la base de datos, al menos una fila. Así que lo que ocurrió fue:

  1. rastrillo esquema de base de cargas
  2. rastrillo intenta cargar ambiente
  3. entorno incluye plug-in
  4. plugin de carga falla debido a que faltan al menos una fila
  5. no hay accesorios se cargan

La solución de hacky es: poner los datos necesarios directamente en el esquema y no en un accesorio, porque está cargado a finales .

Buscaré una solución más conveniente y actualizaré esta respuesta si encuentro una.

+3

Los complementos no deberían hacer cosas como esas. Lo mejor es corregir el complemento y enviarles una solicitud de extracción en github. –

+0

Solucioné el problema dentro del complemento y pronto enviaré un parche. ;) – xijo

0

No estoy seguro de si ya hizo esto, pero exportar los datos de prueba de la base de datos de los archivos yml en test/accesorios usando un plugin como ar_fixtures

+0

Hmm, el problema es obtener datos de los accesorios en la base de datos, ¡creo que ar_fixtures hace al revés! :) – xijo

+0

oh oops :) lo siento, leí mal la pregunta – Jen

5

poner la llamada a fixtures :all en su clase de prueba, no el súper clase (test_helper). Mi suposición es que la inicialización de la superclase no está funcionando de la manera que esperaba y que no se llamará al fixtures :all. Tal vez intente poner la llamada en el método de inicialización de test_helper.

Mis test/test_helper.rb se ve así:

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 

class ActiveSupport::TestCase 
    # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. 
    fixtures :all 

    # Add more helper methods to be used by all tests here... 
end 
+0

Hola cstump, traté de poner 'fixtures: all' directamente en mi clase de prueba, pero no funcionó. Parece que la llamada no tiene ningún efecto, ¡pero no puedo imaginar por qué! – xijo

+0

+1: Esto funcionó para mí y me gusta esta solución porque es localizada y explícita. En este caso, 'accesorios: usuarios' dentro de' UsersControllerTest' serán suficientes. – Johnsyweb

5

Otro enfoque es escribir su propia tarea de rake personalizada para la prueba.

Por ejemplo:


task :test_units do 

    RAILS_ENV = 'test' # Force the environment to test 

    puts "Recreate the test database" 
    Rake::Task['db:test:prepare'].invoke 

    puts "Seed the database with fixtures" 
    Rake::Task['db:fixtures:load'].invoke 

    puts "Executing Unit Tests" 
    Rake::Task['test:units'].prerequisites.clear 
    Rake::Task['test:units'].invoke 
end 

+0

Esto funcionó para mí, +1. La única diferencia fue que tuve que poner 'RAILS_ENV = 'test'' después de' db: test: prepare', o bien Sqlite3 falla con un error que dice que no tengo los permisos correctos para purgar el DB de prueba. –

0

que tenían el mismo problema. O más bien, el problema era que mis dispositivos no estaban actualizados con el esquema de la base de datos.En lugar de lanzar una excepción, Rails acaba de utilizar la base de datos de prueba como una solución alternativa. Lo más dudoso

0

Mi problema: Se olvidó de poner "require 'test_helper'" en la cabecera. por ej.

require 'test_helper' 

class AdminUserTest < ActiveSupport::TestCase 
    # test "the truth" do 
    # assert true 
    # end 
end 
Cuestiones relacionadas