4

我正在尝试设置我的 rails 项目,以便贡献者所需的所有验证都在一个命令中,目前我们一直在运行:

rake test

但是现在我们也想使用 rubocop 进行静态分析:

rubocop -R -a

我希望这可以在一个简单的 rake 任务中执行。覆盖 'rake test' 来运行 rubocop 然后是 rails 项目的标准 rake 测试东西会很好,因为这样就没有人需要记住更改命令。但如果我必须创建一个单独的 rake 任务,那也可能没问题。

在底部看到了 rubocop rake 集成,但我不确定如何将它与“rake test”捆绑到一项任务中......有什么想法吗?

4

5 回答 5

8

我更喜欢将我的默认任务设置为运行 rubocop 然后运行测试。无论哪种方式,将这些任务分开而不是让一个任务做两件事是一个好主意。

require 'rubocop/rake_task'

task :default => [:rubocop, :test]

desc 'Run tests'
task(:test) do
  # run your specs here
end

desc 'Run rubocop'
task :rubocop do
  RuboCop::RakeTask.new
end

你的任务:

> rake -T
rake rubocop  # Run rubocop
rake test     # Run tests
于 2014-07-06T03:25:22.567 回答
4

这是我最终得到的 .rake 文件。

desc 'Run tests and rubocop'
task :validate do
  Rake::Task['rubocop'].invoke
  Rake::Task['test'].invoke
end

task :rubocop do
  require 'rubocop'
  cli = Rubocop::CLI.new
  cli.run(%w(--rails --auto-correct))
end
于 2014-04-30T16:11:56.920 回答
2

您可以轻松定义自己的 rake 任务,该任务首先调用 Rails 的testrake 任务,然后是您为 rubocop 提到的代码片段。

例如,在 .rake 文件中,您可能会有类似的内容:

require 'rubocop/rake_task'

desc 'Run tests and rubocop'
task :my_test do
  Rake::Task['test'].invoke
  RuboCop::RakeTask.new  
end

如果您觉得需要自定义对 Rubocop 的调用并且涉及更多代码,您可以创建另一个自定义任务,例如 :rubocop,然后您也可以从 :my_test 调用它。

最后,创建您自己的 rake 任务并坚持使用的替代方法rake test是修改您的 test_helper 以在测试完成后调用您需要调用的任何内容。

于 2014-04-30T11:35:58.647 回答
2

它似乎已经从:

Rubocop::RakeTask.new

至:

Rubo C op::RakeTask.new

见妈妈?我知道如何使用驼峰格式!

于 2014-08-19T22:47:00.233 回答
0

我使用以下 .rake 文件一次运行测试和 rubocop 任务:

task default: %w[rubocop test]

RuboCop::RakeTask.new(:rubocop) do |task|
  task.patterns = ['**/*.rb']
  task.fail_on_error = false
  task.options = ["--auto-correct-all"]
end

task :test do
  ruby 'test/program_test.rb'
end

第一行允许通过调用来运行这两个任务rake

命令行参数也可以添加到options数组中。

于 2020-12-28T06:56:34.120 回答