отключение транзакционных фикстур в Rspec не имеет никакого эффекта - PullRequest
1 голос
/ 05 января 2011

Из-за устаревшей базы данных, которую я использую, я застрял с MySQL, используя MyISAM, что означает, что мои таблицы не поддерживают транзакции. Это приводит к сбою тестов, поскольку данные таблицы, сгенерированные (я использую factory_girl для приборов) тестами, не возвращаются для каждого сценария.

Я обнаружил, что Rspec предоставляет параметр конфигурации config.use_transactional_fixtures в spec_helper.rb.

, который по умолчанию имеет значение true. Когда я устанавливаю значение false, я не вижу никакого влияния на мои тесты; они все еще терпят неудачу из-за дублирующих записей.

Разве этот параметр не должен автоматически развертывать какие-либо изменения, сделанные в БД? Или я должен сделать это вручную?

1 Ответ

1 голос
/ 05 января 2011

Вы правы - если ваша база данных не поддерживает транзакции, вы должны выполнить несколько команд SQL, чтобы стереть данные перед каждым оператором:

TRUNCATE TABLE tablename;

По одному на каждый из ваших столов.

В вашем helper.rb попробуйте это:

Spec::Runner.configure do |config|
  config.before(:each) do
    tables = %{users posts tags}
    tables.each do |t|
      ActiveRecord::Base.connection.execute('TRUNCATE TABLE #{t}')
    end
  end
  ... 
end 
...