desactivación de accesorios transaccionales en Rspec no tiene ningún efecto
-
25-09-2019 - |
Pregunta
Debido a una base de datos existente que estoy usando, estoy atascado con MySQL usando MyISAM, lo que significa que mis cuadros no son compatibles con las transacciones. Esto está causando que fallen las pruebas, ya que los datos de tabla generados (estoy usando factory_girl para los accesorios) por las pruebas no se revierten para cada escenario.
Me descubrió que Rspec expone el ajuste config.use_transactional_fixtures
config en spec_helper.rb.
que se establece en true de forma predeterminada. Cuando me puse a falso, no veo ningún efecto en mis pruebas; todavía fallan debido a los registros duplicados.
¿No es que la fijación supone que automáticamente desenróllese los cambios realizados en la base de datos? O se supone que tengo que hacerlo manualmente?
Solución
Tiene razón - si su base de datos no admite transacciones debe emitir varios comandos SQL para borrar los datos antes de cada declaración:
TRUNCATE TABLE tablename;
Uno para cada una de las tablas.
En su helper.rb intente esto:
Spec::Runner.configure do |config|
config.before(:each) do
tables = %{users posts tags}
tables.each do |t|
ActiveRecord::Base.connection.execute('TRUNCATE TABLE #{t}')
end
end
...
end