Очистить базу данных после тестирования задачи rake с помощью RSpec

Я пытаюсь проверить свою задачу rake с помощью rspec, и она работает нормально, но проблема в том, что записи после этого не удаляются.

Я поместил config.use_transactional_fixtures = true в файл конфигурации, но это не повлияло. В других тестах все работало нормально.

Вот мой код:

require 'rspec'
require 'spec_helper'
require 'rake'

describe 'my_app rake tasks'  do
    describe 'rake_task_1' do
        before { MyApp::Application.load_tasks }

        it 'should test it!' do
            10.times { create(:record) }
            Rake::Task["rake_task_1"].invoke
            Record.count.should == 10
        end
    end
end

В моей задаче rake я выполняю запрос, используя ActiveRecord::Base.connection.execute. Я уверен, что это что-то с переходами SQL в RSepc....

есть идеи?


person Guy Segev    schedule 23.03.2014    source источник


Ответы (1)


Пробовали ли вы использовать гем database_cleaner?

Вы можете проверить отличную статью Авди Гримм о том, как его настроить.

config.use_transactional_fixtures = false

В файле spec/support/database_cleaner.rb:

RSpec.configure do |config|
  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end
end
person backpackerhh    schedule 23.03.2014
comment
Спасибо! Я использовал after(:each) { DatabaseCleaner.strategy = :truncation; DatabaseCleaner.clean } в этом конкретном файле. - person Guy Segev; 23.03.2014