4

コントリビューターが必要とするすべての検証が 1 つのコマンドで実行されるように、Rails プロジェクトをセットアップしようとしています。現在、次のコマンドを実行しています。

rake test

しかし今、静的分析にも rubocop を使用したいと考えています。

rubocop -R -a

これを 1 つの単純な rake タスクで実行できるようにしたいと考えています。'rake test' をオーバーライドして rubocop を実行し、次に Rails プロジェクトの標準の rake テストを実行すると、コマンドを変更することを覚えておく必要がなくなります。しかし、別の rake タスクを作成する必要がある場合は、おそらくそれも問題ありません。

rubocop rake の統合はここの一番下にありますが、それを「rake test」と一緒に 1 つのタスクにまとめる方法がわかりません... 何か考えはありますか?

4

5 に答える 5

8

デフォルトのタスクを rubocop を実行してからテストするように設定することを好みます。いずれにせよ、1 つのタスクで 2 つのことを行うよりも、これらのタスクを別々にすることをお勧めします。

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

次のように変更されたようです。

Rubocop::RakeTask.new

に:

Rubo C op::RakeTask.new

わかる?私はキャメルケースのやり方を知っています!

于 2014-08-19T22:47:00.233 に答える
2

最初に Rails のtestrake タスクを呼び出し、次に rubocop について言及したコード スニペットを呼び出す独自の rake タスクを簡単に定義できます。

たとえば、.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 に答える