【发布时间】:2010-11-09 00:43:37
【问题描述】:
每次我想运行 Rake 测试时,都会调用任务 db:test:prepare,它会从 schema.rb 和迁移重建我的测试环境数据库。当我想测试制作 Rails 应用程序时,我想要实现的是禁用 db:test:prepare 的调用。是否可以不修改 Rails gem?
【问题讨论】:
标签: ruby-on-rails rake
每次我想运行 Rake 测试时,都会调用任务 db:test:prepare,它会从 schema.rb 和迁移重建我的测试环境数据库。当我想测试制作 Rails 应用程序时,我想要实现的是禁用 db:test:prepare 的调用。是否可以不修改 Rails gem?
【问题讨论】:
标签: ruby-on-rails rake
这是我见过的一个解决方案:
在您的 Rakefile 中:
Rake::TaskManager.class_eval do
def remove_task(task_name)
@tasks.delete(task_name.to_s)
end
end
在lib/tasks/db/test.rake:
Rake.application.remove_task 'db:test:prepare'
namespace :db do
namespace :test do
task :prepare do |t|
# rewrite the task to not do anything you don't want
end
end
end
【讨论】:
test:units、test:functionals 和test:integration,这样它们就不会继承自db:test:prepare 任务。
remove_task改成:def rename_task(task_name, new_task_name) @tasks[new_task_name] = @tasks.delete(task_name) end你还是要重写db:test:prepare,因为测试任务还是会运行它。
有一个插件可以为您解决这个问题:override_rake_task。下面是一个简单的用法示例:
namespace :db do
namespace :test do
override_task :prepare do; end
end
end
【讨论】:
对于一些旧版本的 rails - 您可以将 Rake::Task['db:test:prepare'].clear 放在 Rakefile 的末尾
【讨论】: