В настоящее время я начинаю переход от осветительных приборов к фабрикам и сталкиваюсь с некоторыми проблемами в тестовой базе данных.
Когда я запускаю весь свой набор тестов, база данных очищается и новые сгенерированные на заводе данные перезагружаются. Однако при запуске отдельных модульных тестов база данных не очищает старые значения.
Я мог бы запустить rake db: test: prepare перед каждым отдельным тестом, но это замедлило бы мою разработку.
Вот мои настройки теста:
self.use_transactional_fixtures = false
self.use_instantiated_fixtures = true
Например:
require File.dirname(__FILE__) + '/../test_helper'
class LocationTest < ActiveSupport::TestCase
test "should require name to save" do
location = Factory.create(:location)
end
end
будет успешно запущен один раз, но при последующих запусках тестового файла произойдет сбой. Этого раньше никогда не было, потому что тестовые приборы загружались при каждом запуске.
Я добавил фабричную последовательность, но только последовательности атрибутов во время каждого запуска:
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
Результат:
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