Rails - 在一项任务中进行Rake测试和rubocop

时间:2014-04-30 11:16:39

标签: ruby-on-rails ruby rake static-analysis rubocop

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

rake test

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

rubocop -R -a

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

我已经看到了rubocop rake整合here, at the bottom,但我不确定如何将其与“rake test”捆绑在一起[&3]。完成一项任务......有什么想法吗?

5 个答案:

答案 0 :(得分:8)

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

注意:从0.24开始,Rubocop在您的代码中变为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

答案 1 :(得分: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

答案 2 :(得分:2)

似乎已改变:

Rubocop :: RakeTask.new

为:

Rubo C 的运算:: R​​akeTask.new

见马?我知道如何使用CamelCase!

答案 3 :(得分:1)

您可以轻松定义自己的rake任务,该任务首先调用Rails' test rake任务,然后是你为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以调用测试完成后调用的任何内容。

答案 4 :(得分: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 数组中。