Jestem obecnie w trakcie rozpoczynania migracji od urządzeń do fabryk i uruchamiania niektórych testów baz danych.Jak uzyskać bazę danych testów Rails do przebudowania przed każdym testem?
Po uruchomieniu całego zestawu testów baza danych jest czyszczona, a nowe dane generowane fabrycznie są ponownie ładowane. Jednak po uruchomieniu poszczególnych testów jednostkowych baza danych nie wyczyści starych wartości.
Mogę uruchomić prowizję db: test: przygotuj się przed każdym indywidualnym testem, ale to spowolniłoby mój rozwój.
Oto moje ustawienia testowe:
self.use_transactional_fixtures = false
self.use_instantiated_fixtures = true
Na przykład:
require File.dirname(__FILE__) + '/../test_helper'
class LocationTest < ActiveSupport::TestCase
test "should require name to save" do
location = Factory.create(:location)
end
end
będą prowadzone raz pomyślnie lecz nie na kolejnych przebiegów pliku testowego. To nigdy wcześniej się nie zdarzyło, ponieważ urządzenia testowe ładowały się przy każdym uruchomieniu.
Dodałem sekwencjonowanie fabryki, ale to tylko sekwencje atrybutów podczas każdego biegu:
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
skutkuje:
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
Dodaj: self.use_transactional_fixtures = true dla tej klasy i to działa! Dziękuję Ci. Tak, istnieją powody, dla których nie mogę go zmienić na całe środowisko. Nawet nie pomyślałem, żeby to zmienić tylko na jeden test ... doh! Jeszcze raz dziękuję. –