2017-08-16 21 views
1

RubyCopのRails/DynamicFindBy警官は、Capybaraの(レールとは対照的に)find_by_idメソッドに遭遇したときに偽陽性を示します。
メソッドをホワイトリストに登録して、この警官が無視する方法があるようです。 http://rubocop.readthedocs.io/en/latest/cops_rails/#railsdynamicfindby(Whitelist属性を参照)を参照してください。ファイル単位でRuboCop Rails/DynamicFindByメソッドをホワイトリストに登録することはできますか?

私のテスト/統合ディレクトリには、特定のファイル(Capybaraテストのファイル)のホワイトリストfind_by_idがありますが、のみです。これは可能ですか?

(私はファイルごとにファイル全体をオフにすることができますが、私は完全にオフにしたくないことに気付いています。ファイル、または行単位ではなく、それらは解決策を好まれません。)

答えて

1

あなたは

# In .rubocop.yml 
Rails/DynamicFindBy: 
    Include: 
    - tests/integrations/**/*.rb 
    Whitelist: 
    - find_by_id 
    - find_by_something_else 

それとも、追加できるようにあなたのrubocop設定ファイルにこれを設定することができるはず新しい.rubocop.ymlファイルを、ホワイトリストに登録し、全体の設定から継承したいファイルを含むディレクトリに移動します。https://github.com/bbatsov/rubocop/blob/master/manual/configuration.md#inheritance

を参照してください。
0

その答えはほぼそれであり、私が欲しいものを正確に行うために簡単に修正することができます。答えは完全ではありません。なぜなら、それはファイル単位ではなくディレクトリ単位であるからです。だから、唯一の変化はInclude内の特定のファイルを一覧表示することです:

# In .rubocop.yml 
Rails/DynamicFindBy: 
    Include: 
    - tests/integrations/first_test.rb 
    - tests/integrations/second_test.rb 
    Whitelist: 
    - find_by_id 
    - find_by_something_else 
1

ファイル単位でこれを実行する方法はありません。あなたが得ることができる最も近いものは、別のディレクトリ.rubocop.ymlを内部に置くことによって、ディレクトリレベルで特定の構成を持つことです。

それは次のようになりますが、最初はソリューションです:

# .rubocop.yml 
Rails/DynamicFindBy: 
    Include: 
    - tests/integrations/first_test.rb 
    - tests/integrations/second_test.rb 
    Whitelist: 
    - find_by_id 

しかしInclude手段は「検査のために含まれる」ではなく、「設定に含まれる」ので、これは実際にによって検査されているから、他のすべてのプロジェクトファイルを除外します完全に警官。 (そもそも他のファイルには罪がなかった場合、あなたは気づかないであろう。)は、2つのオプションの葉

:別の設定ファイルを使用して、/integrations内のすべてのファイルのための

  1. ホワイトリスト#find_by_idを。
  2. インラインの無効化と無効化を使用します。

他の統合テストでは#find_by_idが許可されない理由がない限り、前者が推奨されます。

+0

これを微調整する方法は、すべてのcapybaraテストファイルを別のディレクトリに移動し、そのディレクトリに対してのみ 'find_by_id'をホワイトリストに追加することです。私の懸念:** ActiveRecordの** find_by_id動的メソッドをブラックリストに載せることを合理的に可能な限り希望します。 – user2069311

関連する問題