2017-08-16 20 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

相关问题