每次我都参加考试。 Rails将从表中删除我的数据。我的表中有数百万的记录用于测试搜索性能和纠正。我每次运行测试时都无法添加数据。
当我运行测试时,如何告诉rails“请不要删除此表中的数据”。
PS。
我找到了这个链接
How do I run Rails integration tests without dropping DB contents?
这可能与我的问题有关,但我不知道将他的代码放在我的rails项目中。
答案 0 :(得分:7)
与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
答案 1 :(得分: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
答案 2 :(得分:1)
“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
。此外,当您使用自动测试而不是rake任务时,DB将不会被更改。
答案 3 :(得分: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
然后运行命令test允许第一个回答。数据库测试没有丢失。