2017-08-16 27 views
1

RuboCop的Rails/DynamicFindBy警察在遇到水豚(而不是鐵路)find_by_id方法時給出誤報。
顯然有一種白名單方法的方法,以便他們被這個警察忽略。請參閱http://rubocop.readthedocs.io/en/latest/cops_rails/#railsdynamicfindby(提及白名單屬性)。我可以在每個文件的基礎上白名單RuboCop Rails/DynamicFindBy方法

我想白名單find_by_id,但只有某些文件(與水豚測試的那些)在我的測試/集成目錄。這可能嗎? (我知道我可以通過文件關閉整個警察,但我不想完全關閉警察,我也知道我可以關閉警察的部分一個文件,或者在一行接一行的基礎,但這些都是不可取的解決方案。)

回答

1

你應該可以設置這個在您的rubocop配置文件像

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

或者你可以添加一個新的.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手段「包括檢查」,而不是「列入配置」,所以實際上由被檢查排除所有其他項目文件完全是警察。 (你是否有在其他文件中沒有犯罪的開始也不會注意到。)

剩下兩個選擇:

  1. 白名單#find_by_id的所有文件都/integrations,使用其他的配置文件。
  2. 使用內聯禁用和-enables。

前者可能是推薦的一種,除非在其他集成測試中不應該允許#find_by_id的原因很強。

+0

也許一種微調方法是將所有的水豚測試文件移動到一個單獨的目錄中,並且只爲該目錄列出'find_by_id'白名單。我的擔憂:我希望 - 儘可能合理 - 繼續將黑名單** ActiveRecord的** find_by_id動態方法。 – user2069311

相關問題