2012-08-31 30 views
7

Al intentar seguir el ejemplo en database_cleaner de GitHub page, I encontró el siguiente error de RSpec:SQLite3 :: SQLException cuando se utiliza database_cleaner con rieles/Spork/RSpec

ActiveRecord::StatementInvalid: 
    SQLite3::SQLException: cannot start a transaction within a transaction: begin transaction 

La configuración utilizada en spec_helper.rb es:

require 'spork' 
require 'database_cleaner' 

Spork.prefork do 
# .. snip 
    RSpec.configure do |config| 
    # .. snip 
    config.before(:suite) do 
     DatabaseCleaner.strategy = :transaction 
     DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
     DatabaseCleaner.start 
    end 

    config.after(:each) do 
     DatabaseCleaner.clean 
    end 
    end 
end 

Spork.each_run do 

end 
+0

Recibo el mismo error al crear un registro, ¿me puede ayudar? http://stackoverflow.com/questions/14367396/sql-error-cannot-start-a-transaction-within-a-transaction-while-testing-with-cuc – pahnin

Respuesta

6

Encontré la solución para cambiar toda la estrategia a :truncation. spec_helper actualización:

require 'spork' 
require 'database_cleaner' 

Spork.prefork do 

    RSpec.configure do |config| 
    config.use_transactional_fixtures = false 

    config.before(:suite) do 
     DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
     DatabaseCleaner.start 
    end 

    config.after(:each) do 
     DatabaseCleaner.clean 
    end 

    end 
end 

Spork.each_run do 

end 
+0

excelente - gracias por la ayuda! – bonhoffer

9

La respuesta aceptada hace que todas las pruebas más lento (cuando no es necesario) truncando después de cada uno.

Sólo añadir

config.use_transactional_fixtures = false 

cuando se utiliza database_cleaner.

Si tiene ambos config.use_transactional_fixtures = true y DatabaseCleaner.strategy = :transaction va a iniciar una transacción dentro de otra transacción y eso no está permitido.

+0

Ha pasado un tiempo desde que tuve este problema. Creo que pude haber intentado eso. Olvida qué proyecto, así que no puedo volver a probar = \ – Dan

+0

@Dan, pensé que eso podría haber sucedido, pero respondí para mantener un registro para futuros lectores. –

Cuestiones relacionadas