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