Attualmente sono in procinto di iniziare una migrazione da dispositivi alle fabbriche e l'esecuzione di alcune sfide del database di test.Come posso ricostruire il database di test di Rails prima di ogni test?
Quando eseguo l'intera suite di test, il database viene pulito e i nuovi dati generati in fabbrica vengono ricaricati. Tuttavia, quando eseguo test di unità individuali, il database non cancella i vecchi valori.
Potrei eseguire rake db: test: preparare prima di ogni singolo test, ma ciò rallenterebbe il mio sviluppo.
Qui sono le mie impostazioni di test:
self.use_transactional_fixtures = false
self.use_instantiated_fixtures = true
Per esempio:
require File.dirname(__FILE__) + '/../test_helper'
class LocationTest < ActiveSupport::TestCase
test "should require name to save" do
location = Factory.create(:location)
end
end
verrà eseguito una volta con successo, ma non vengono eseguiti sulle successive esecuzioni di file di test. Ciò non è mai accaduto in precedenza perché i dispositivi di prova verrebbero caricati ad ogni corsa.
ho aggiunto sequenziamento fabbrica, ma gli attributi che solo sequenze durante ogni corsa:
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
risultati in:
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
Add: self.use_transactional_fixtures = true a questa classe e funziona! Grazie. Sì, ci sono ragioni per cui non posso cambiarlo per l'intero ambiente. Non ho nemmeno pensato di cambiarlo solo per questo test ... doh! Grazie ancora. –