【问题标题】:Can I whitelist a RuboCop Rails/DynamicFindBy method on a per-file basis我可以按文件将 RuboCop Rails/DynamicFindBy 方法列入白名单吗
【发布时间】:2017-08-16 19:31:00
【问题描述】:

RuboCop 的 Rails/DynamicFindBy cop 在遇到 Capybara(而不是 Rail)的 find_by_id 方法时会给出误报。
显然有一种方法可以将方法列入白名单,这样警察就会忽略它们。见http://rubocop.readthedocs.io/en/latest/cops_rails/#railsdynamicfindby(提到白名单属性)。

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

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

【问题讨论】:

    标签: ruby-on-rails ruby capybara rubocop


    【解决方案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

    【讨论】:

      【解决方案2】:

      无法逐个文件执行此操作。最接近的方法是在目录级别进行特定配置,方法是在其中放入另一个 .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. 使用内联禁用和启用。

      前者可能是推荐的,除非有充分的理由说明为什么在其他集成测试中不应允许 #find_by_id

      【讨论】:

      • 也许一种微调的方法是将所有水豚测试文件移动到一个单独的目录,并将 find_by_id 列入白名单仅针对该目录。我的担忧:我希望 - 尽可能合理地 - 继续将 ActiveRecord 的 find_by_id 动态方法列入黑名单。
      • 您能否提供更多有关某人如何“使用另一个配置文件将 /integrations 中所有文件的 #find_by_id 列入白名单”的上下文?
      【解决方案3】:

      答案差不多了,可以轻松修改以完全满足我的要求。答案并不完美,因为它是逐个目录,而不是逐个文件。所以唯一的改变就是在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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-03
        • 2017-09-18
        • 2010-11-05
        • 2020-03-26
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多