我可以基于每个文件将RuboCop Rails / DynamicFindBy方法列入白名单

时间:2017-08-16 19:31:01

标签: ruby-on-rails ruby capybara rubocop

RuboCop的Rails / DynamicFindBy警察遇到Capybara(而不是Rail的)find_by_id方法时会出现误报。
显然有一种方法可以将这些方法列入白名单,以便他们被这名警察忽略。请参阅http://rubocop.readthedocs.io/en/latest/cops_rails/#railsdynamicfindby(提及白名单属性)。

我想在我的测试/集成目录中将find_by_id列入白名单,但用于某些文件(具有Capybara测试的文件)。这可能吗?

(我知道我可以逐个文件关闭整个警察,但我不想完全关闭警察。我也知道我可以关闭部分警察文件,或逐行,但这些不是首选的解决方案。)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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. 使用内联禁用和启用。
  3. 前者可能是推荐的,除非有充分的理由说明为什么#find_by_id不应该在其他集成测试中被允许。

答案 2 :(得分: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