我可以按文件将RuboCop rails/DynamicFindBy方法列入白名单吗

eqqqjvef  于 2022-09-21  发布在  Ruby
关注(0)|答案(4)|浏览(142)

RuboCop的Rails/DynamicFindBy CoP在遇到Capybara的(与Rail的相反)find_by_id方法时会产生误报。
显然,有一种方法可以将方法列入白名单,这样它们就会被这个COP忽略。请参见http://rubocop.readthedocs.io/en/latest/cops_rails/#railsdynamicfindby(提到白名单属性)。

我想要将find_by_id列入白名单,但针对我的test/集成目录中的某些文件(带有Capybara测试的文件)。这个是可能的吗?

(我知道我可以逐个文件地关闭整个COP,但我不想完全关闭COP。我还知道,我可以针对文件的某些部分或逐行关闭COP,但这些都不是首选的解决方案。)

o4tp2gmn

o4tp2gmn1#

您应该能够在您的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

mbzjlibv

mbzjlibv2#

不可能在逐个文件的基础上执行此操作。通过将另一个.rubocop.yml配置文件放入其中,您可以获得在目录级别上的特定配置。

乍一看,这似乎是一种解决方案:


# .rubocop.yml

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

Include的意思是“包括以供检查”,而不是“包括以供配置”,因此这实际上将所有其他项目文件完全排除在缔约方会议检查之外。(如果其他文件一开始就没有犯罪行为,你就不会注意到这一点。)

这就只剩下两个选择了:

1.将/integrations中的所有文件列入白名单#find_by_id,使用另一个配置文件。
1.使用内联禁用和-启用。

前者可能是推荐的方法,除非有充分的理由不允许在其他集成测试中使用#find_by_id

k10s72fa

k10s72fa3#

答案几乎就是这样,而且可以很容易地进行修改,以完全按照我的要求进行操作。答案并不完美,因为它是逐个目录的,而不是逐个文件的。因此,唯一的更改是列出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
5m1hhzi4

5m1hhzi44#

您可以在Rubocop.yml中排除等级库:

Rails/DynamicFindBy:
  Exclude:
    - "spec/system/**/*"

相关问题