Después de una resolución de problemas significativa, descubrí que necesitaba ejecutar rake spec
una vez (puedo abortar con control-c) antes de poder ejecutar rspec directamente (por ejemplo, en un subconjunto de nuestras especificaciones). Estamos ejecutando Rails 3.0.7 y RSpec 2.5.0.
Claramente, rake está ejecutando algunas tareas / código de configuración de base de datos importantes (tenemos código personalizado en los rieles de nivel raíz Rakefile y posiblemente en otros lugares).
¿Cómo puedo ejecutar el código / tareas de configuración de la base de datos de prueba de rake sin ejecutar rake spec
?
Además de poder ejecutar rspec en un subconjunto de archivos, estoy usando specjour para difundir nuestras especificaciones en varios núcleos (todavía no he tenido éxito al difundirlas en la LAN), pero veo el mismo comportamiento que para ejecutar rspec directamente: necesito ejecutar rake spec
en cada base de datos de prueba (asumiendo dos núcleos) antes de que funcione specjour:
rake spec TEST_ENV_NUMBER=1
control-c (after tests start)
rake spec TEST_ENV_NUMBER=2
control-c (after tests start)
specjour
Nota: mi config / database.yml tiene esta entrada para prueba (como es común para las gemas de prueba paralelas):
test:
adapter: postgresql
encoding: unicode
database: test<%=ENV['TEST_ENV_NUMBER']%>
username: user
password:
Paralelo_tests parece configurar sus bases de datos correctamente, pero muchas de nuestras especificaciones fallan.
También debo mencionar que la ejecución specjour prepare
hace que Postgres registre errores que no pueden encontrar las bases de datos, pero las crea (sin tablas). En una ejecución posterior, no se registran errores, pero tampoco se crean tablas. Es posible que todo mi problema sea simplemente un error prepare
, así que lo informé en github.
Creo que puedo ejecutar código arbitrario en cada base de datos de prueba specjour configurando Specjour::Configuration.prepare
.specjour / hooks.rb, por lo que si hay tareas de rastrillo u otro código que necesito ejecutar, puede funcionar allí.