Actualmente estoy en el proceso de comenzar una migración de instalaciones a fábricas y enfrentar algunos desafíos de la base de datos de prueba.¿Cómo obtengo la base de datos de prueba Rails para reconstruir antes de cada prueba?
Cuando ejecuto todo el conjunto de pruebas, se limpia la base de datos y se vuelven a cargar los nuevos datos generados en fábrica. Sin embargo, cuando ejecuto pruebas de unidades individuales, la base de datos no elimina los valores anteriores.
Podría ejecutar rake db: test: preparar antes de cada prueba individual, pero eso ralentizaría mi desarrollo.
Éstos son mis ajustes de la prueba:
self.use_transactional_fixtures = false
self.use_instantiated_fixtures = true
Por ejemplo:
require File.dirname(__FILE__) + '/../test_helper'
class LocationTest < ActiveSupport::TestCase
test "should require name to save" do
location = Factory.create(:location)
end
end
se ejecutará una vez correctamente pero fallan en ejecuciones posteriores del archivo de prueba. Esto nunca ocurrió antes porque los dispositivos de prueba se cargarían en cada ejecución.
He añadido secuenciación fábrica, pero los atributos que sólo las secuencias durante cada ejecución:
Factory.define :location do |l|
l.sequence(:name) {|n| "place#{n}"}
l.street '123 N Pitt Street'
l.state_id 4
l.city 'San Francisco'
l.location_type_id LocationType::COMMON
l.shipper_id 1
l.zip 23658
end
resultados en:
trunk>ruby test\unit\location_test.rb
Loaded suite test/unit/location_test
Started
.
Finished in 0.162 seconds.
1 tests, 0 assertions, 0 failures, 0 errors
>ruby test\unit\location_test.rb
Loaded suite test/unit/location_test
Started
E
Finished in 0.134 seconds.
1) Error:
test_should_require_name_to_save(LocationTest):
ActiveRecord::RecordInvalid: Validation failed: Name has already been taken
c:/ruby/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.1/lib/factory_girl/proxy/create.rb:5:in `result'
c:/ruby/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.1/lib/factory_girl/factory.rb:293:in `run'
c:/ruby/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.1/lib/factory_girl/factory.rb:237:in `create'
test/unit/location_test.rb:18:in `test_should_require_name_to_save'
1 tests, 0 assertions, 0 failures, 1 errors
Añadir: self.use_transactional_fixtures = true a esta clase y funciona! Gracias. Sí, hay razones por las que no puedo cambiarlo para todo el entorno. Ni siquiera pensé en cambiarlo solo por esta prueba ... ¡doh! Gracias de nuevo. –