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?

¿Fue útil?

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 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top