1., 2. 4. &, Debe utilizar transacciones (ya sea con o use_transactional_fixtures
transacciones apoyo de la gema database_cleaner) si está utilizando el motor por defecto de capibara, rack_test. Como ha notado, el uso de transacciones es sustancialmente más rápido que el uso de una estrategia de truncamiento. Sin embargo, cuando las escrituras de la base de datos pueden pasar por diferentes hilos (como con el selenio), las transacciones no funcionarán. Por lo tanto, deberá usar el truncamiento (o forzar todo para pasar por un hilo de base de datos, otra opción).
3. Sí, debe desactivar use_transactional_fixtures
al usar la gema database_cleaner dado que la gema admite transacciones nativamente. Si solo necesita transacciones, simplemente use use_transactional_fixtures y nunca cargue la gema de database_cleaner.
5. El siguiente código cambiará entre :transaction
y :truncation
sobre la marcha. (Probado con rspec, capibara, rails3.)
Características Esto debería darte lo mejor de ambos mundos. La velocidad de rack_test
cuando no necesita probar cosas de javascript y la flexibilidad de selenium
cuando lo hace.
También este código se encarga de repoblar los datos de la semilla en los casos en que sea necesario (este método supone que use seeds.rb para cargar sus datos de inicialización, como es la convención actual).
Agregue el siguiente código a spec_helper.
config.use_transactional_fixtures = false
RSpec.configure do |config|
config.before(:suite) do
require "#{Rails.root}/db/seeds.rb"
end
config.before :each do
if Capybara.current_driver == :rack_test
DatabaseCleaner.strategy = :transaction
else
DatabaseCleaner.strategy = :truncation
end
DatabaseCleaner.start
end
config.after(:each) do
if Capybara.current_driver == :rack_test
DatabaseCleaner.clean
else
DatabaseCleaner.clean
load "#{Rails.root}/db/seeds.rb"
end
end
end
Gracias Jo Liss por señalar el camino.
PS: La manera de conectar los conductores sobre la marcha
La solución anterior se supone que ya sabe cómo cambiar los conductores sobre la marcha. En caso de que algunos de los que vienen aquí no lo hagan, así es cómo:
Como arriba, supongamos que normalmente usará el driver de capybara predeterminado rack_test, pero necesita usar selenio para probar algunas cosas de Ajaxy. Cuando desee utilizar el controlador de selenio, use :js => true
o @javascript
para Rspec o pepino, respectivamente. Por ejemplo:
ejemplo Rspec: ejemplo
describe "something Ajaxy", :js => true do
Pepino:
@javascript
Scenario: do something Ajaxy
Interesante: [Fixtures v. Factories - ¿No podemos todos nos llevamos bien?] (Http://www.metabates.com/2010/08/15/fixtures-v-factories-cant-we-all- just-get-along /) – Zabba