首页 > 解决方案 > 无法在一个文件中测试两个 rake 任务

问题描述

我正在尝试为一些 rake 任务编写一些基本的烟雾测试。由于我不明白的原因,Don't know how to build task...如果两者都未注释,我会收到错误消息。如果我推荐任何一个,它都可以正常工作(以任何顺序)。

规范/任务/foo_spec.rb

require "rails_helper"
require "rake"

describe "Foo rake tasks" do
  before do
    @rake = Rake::Application.new
    Rake.application = @rake
    Rake.application.rake_require "../rakelib/foo"
    Rake::Task.define_task(:environment)
  end

  describe "rake foo:bar" do
    before do
      @task_name = "foo:bar"
    end

    it "runs without errors" do
        expect { @rake[@task_name].invoke('1') }.not_to raise_error
    end
  end

  describe "rake foo:rab" do
    before do
      @task_name = "foo:rab"
    end

    it "runs without errors" do
        expect { @rake[@task_name].invoke('1', 'boo') }.not_to raise_error
      end
    end
  end

end

此设置是对本教程的改编。

标签: ruby-on-railsrspecrake

解决方案


这是有效的方法,改编自this

require "rails_helper"
require "rake"

describe "Foo rake tasks" do

  before :all do
    Rake.application.rake_require "../rakelib/foo"
    Rake::Task.define_task(:environment)
  end

  describe "rake foo:bar" do
    let :run_rake_task do
      Rake::Task["foo:bar"].reenable
      Rake.application.invoke_task "foo:bar"
    end

    it "runs without errors" do
      expect { run_rake_task }.not_to raise_error
    end
  end
end

推荐阅读