Как сохранить данные при запуске теста в рельсах - PullRequest
4 голосов
/ 21 июля 2009

Каждый раз, когда я запускаю тест. Rails удалит мои данные из таблицы. У меня есть миллион записей в моей таблице для тестирования производительности поиска и исправления. Я не могу добавлять данные при каждом запуске теста.

Как сказать rails "Пожалуйста, не удаляйте данные в этой таблице", когда я запускаю тест.

пс.

Я нашел эту ссылку

Как запустить интеграционные тесты Rails без удаления содержимого БД?

Возможно, это связано с моими проблемами, но я не знаю, где разместить его код в моем проекте rails.

Ответы [ 4 ]

7 голосов
/ 31 июля 2012

Очень похоже на предыдущий пост neokain, однако, он не работал на Rails 3 для меня. Я пошел дальше и бросил это в свой Rakefile в корне приложения, и когда я запускаю test: units, он не уничтожает все мои существующие таблицы:

Rake::TaskManager.class_eval do
  def delete_task(task_name)
    @tasks.delete(task_name.to_s)
  end
  Rake.application.delete_task("db:test:purge")
  Rake.application.delete_task("db:test:prepare")
end

namespace :db do
  namespace :test do
    task :purge do
    end
    task :prepare do
    end
  end
end
2 голосов
/ 21 декабря 2013

В Rails 4 я получаю следующее

# lib/tasts/test.rake
# Do not drop database for tests
if ENV['RAILS_ENV'] == 'test'
  Rake::TaskManager.class_eval do
    def delete_task(task_name)
      @tasks.delete(task_name.to_s)
    end
  end

  Rake.application.delete_task("db:test:load")

  namespace :db do
    namespace :test do
      task :load do
      end
    end
  end
end
1 голос
/ 04 августа 2009

Я пытаюсь разрешить первый ответ, но не работает.

Я ищу и нашел это www.pervasivecode.com , и я изменяю код с первого ответа следующим образом:

if ENV['NO_DB']
  Rake::TaskManager.class_eval do
    def delete_task(task_name)
      @tasks.delete(task_name.to_s)
    end
    Rake.application.delete_task("db:test:purge")
  end

  namespace :db do
   namespace :test do
    task :prepare do
    end
   end
  end
end

Затем выполните команду test allow first answer. Тест базы данных не сбрасывается.

1 голос
/ 22 июля 2009

Задача "rake test" всегда запускает db: test: prepare, которая воссоздает вашу базу данных.

Вы можете добавить это где-нибудь в lib / tasks:

if ENV['NO_DB']
  namespace :db do
    namespace :test do
      task :prepare do
      end
    end
  end
end

А затем запустить NO_DB=1 rake test. Также, когда вы используете автотест вместо рейка, БД не будет изменена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...