2009-07-21 3 views
4

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

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

пс.

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

How do I run Rails integration tests without dropping DB contents?

Это может быть связанно с моими проблемами, но я не знаю, куда поместить свой код в моем проекте рельсы.

ответ

7

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

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 
+0

Ах, черт возьми. Я забыл, что rake spec сделал это ... Для других гуглеров это тоже пришло мне в голову, когда я использовал rake spec, а также использовал database_cleaner. Он сдул мои данные о семени, и я подумал, что правильно замаскирован пылесосом db, поэтому ИТ не ударит его. Но этот метод отлично работает. Иногда «рельсы полезны» - это действительно боль в рельсах ... –

1

Задача «rake test» всегда выполняется db: test: подготовить, которая будет воссоздавать вашу базу данных.

Вы можете добавить это где-то в Lib/задач:

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

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

1

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

Я поиск и нашел этот 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 

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

2

В 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 
Смежные вопросы