【问题标题】:How to prevent Rake test to call task db:test:prepare如何防止 Rake 测试调用任务 db:test:prepare
【发布时间】:2010-11-09 00:43:37
【问题描述】:

每次我想运行 Rake 测试时,都会调用任务 db:test:prepare,它会从 schema.rb 和迁移重建我的测试环境数据库。当我想测试制作 Rails 应用程序时,我想要实现的是禁用 db:test:prepare 的调用。是否可以不修改 Rails gem?

【问题讨论】:

    标签: ruby-on-rails rake


    【解决方案1】:

    这是我见过的一个解决方案:

    在您的 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
    

    【讨论】:

    • 我喜欢这个。有了这个,你不必安装任何插件,它工作得很好。但是,如果我以后想使用 prepare 方法怎么办?是否可以仅将其从 Rake 运行队列中删除?
    • 在这种情况下,我猜您必须使用此方法重写test:unitstest:functionalstest: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,因为测试任务还是会运行它。
    • mckeed 这就是另一个答案中提到的插件的作用。但我不需要保留旧任务。
    【解决方案2】:

    有一个插件可以为您解决这个问题:override_rake_task。下面是一个简单的用法示例:

    namespace :db do
      namespace :test do
        override_task :prepare do; end
      end
    end
    

    【讨论】:

      【解决方案3】:

      对于一些旧版本的 rails - 您可以将 Rake::Task['db:test:prepare'].clear 放在 Rakefile 的末尾

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-30
        • 2012-04-03
        • 2011-01-03
        • 2013-05-13
        • 2010-11-18
        • 2014-09-06
        • 2015-04-01
        • 1970-01-01
        相关资源
        最近更新 更多