Девушка с фабрики создала объекты, которые не очищаются между тестами?

Я задерживаюсь при выполнении тестов с небольшим замешательством. С помощью User.create я могу создавать и сохранять несколько тестов:

should "test something" do
  u1 = User.create(:first_name => "Fred", :last_name => "Flintstone")
  assert true
end

should "test something else" do
  u1 = User.create(:first_name => "Fred", :last_name => "Flintstone")
  assert true
end

но используя Factory.create, он выдает ошибку повторяющейся записи ActiveRecord:

should "test something" do
  Factory.create(:amanda_levy)
  assert true
end

should "test something else" do
  Factory.create(:amanda_levy)
  assert true
end

Ошибка: «ActiveRecord::StatementInvalid: Mysql::Error: Дублирующаяся запись»

Что дает?


person ambertch    schedule 13.08.2010    source источник
comment
что такое :amanda_levy, это, вероятно, источник проблемы   -  person thenengah    schedule 13.08.2010
comment
это просто синтаксис Factory Girl для Factory.create(:factory_name)   -  person ambertch    schedule 16.08.2010


Ответы (1)


У вас есть следующая строка в вашем spec_helper:

config.use_transactional_fixtures = true

Это говорит rspec/test::unit запускать транзакцию в начале каждого тестового примера и выполнять откат по его завершении.

person nathanvda    schedule 13.08.2010
comment
Также стоит проверить, поддерживает ли ваша тестовая база данных транзакции. Например, mysql, использующий механизм хранения MyISAM по умолчанию, этого не делает. - person Shadwell; 13.08.2010