Ruby on rails 在rails中运行测试时如何保存数据

Ruby on rails 在rails中运行测试时如何保存数据,ruby-on-rails,testing,Ruby On Rails,Testing,每次我运行测试。Rails将从表中删除我的数据。我的表中有数百万条记录用于测试搜索性能和纠正错误。我不能每次运行测试时都添加数据 当我运行测试时,如何告诉rails“请不要删除此表中的数据” 附言 我找到了这个链接 这可能与我的问题有关,但我不知道将他的代码放在我的rails项目中的何处。rake test任务始终运行db:test:prepare,它将重新创建数据库 您可以将其添加到lib/tasks中的某个位置: if ENV['NO_DB'] namespace :db do

每次我运行测试。Rails将从表中删除我的数据。我的表中有数百万条记录用于测试搜索性能和纠正错误。我不能每次运行测试时都添加数据

当我运行测试时,如何告诉rails“请不要删除此表中的数据”

附言

我找到了这个链接

这可能与我的问题有关,但我不知道将他的代码放在我的rails项目中的何处。

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测试
。此外,当您使用自动测试而不是rake任务时,数据库不会更改。

我尝试允许第一个答案,但不工作

我搜索并找到了这个,我修改了第一个答案中的代码,如下所示:

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。数据库测试不是drop。

与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

在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

啊,见鬼。我忘了是rake spec干的。。。对于其他谷歌用户来说,我在运行rake spec的同时也使用了database_cleaner。它正在吹走我的种子数据,我认为我已经用db cleaner正确屏蔽了这些数据,这样它就不会吹走了。但是这种方法非常有效。有时候“rails的帮助”真的是rails中的一种痛苦。。。