簡體   English   中英

Rails - 在一項任務中進行 Rake 測試和 rubocop

[英]Rails - Rake test and rubocop in one task

我正在嘗試設置我的 rails 項目,以便貢獻者所需的所有驗證都在一個命令中,目前我們一直在運行:

rake test

但是現在我們也想使用 rubocop 進行靜態分析:

rubocop -R -a

我希望它可以在一個簡單的 rake 任務中執行。 覆蓋'rake test'以運行rubocop然后是rails項目的標准rake測試內容會很好,因為這樣沒有人將不得不記住更改命令。 但如果我必須創建一個單獨的 rake 任務,那也可能沒問題。

我已經在底部看到了 rubocop rake 集成,但我不確定如何將它與“rake 測試”捆綁到一項任務中......有什么想法嗎?

我更喜歡將我的默認任務設置為運行 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

這是我最終得到的 .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

您可以輕松定義自己的 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 以調用您在測試完成后需要調用的任何內容。

它似乎已經從:

Rubocop::RakeTask.new

到:

Rubo C op::RakeTask.new

看到嗎? 我知道如何使用 CamelCase!

我使用以下 .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數組中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM