自定义 Rails 初始值设定项作为 class

Custom Rails initializer as a class

我有一个初始化程序可以将一些数据从 csv 文件加载到要在模型中使用的全局变量。现在看起来像这样:

...
XYZ = Hash[*CSV.open...]

现在我想为这个初始化程序写一个 rspec 规范。我正在使用 rubocop-rspec,它说 describe 不应该采用字符串,而是 class 或模块 (https://www.rubydoc.info/gems/rubocop-rspec/1.1.0/RuboCop/Cop/RSpec/DescribeClass).

假设这是合理的,将初始化程序转换为 class 的选项是什么?

有一个选项可以使用 describe XYZ,但它似乎不正确。

1) 嗯,你可以将 Hash[*CSV.open...] 包装到一些助手 class 或模块中,比如 DataLoader,用测试覆盖它,然后像 XYZ = DataLoader.do_stuff(filename) 一样调用你的初始化器。

但是有一个 "issue" 使用这种方法:class 将是真正的 "dumb"(根本不添加任何自定义逻辑,只是包装来自 stdlib 的几个方法)和将仅在初始化程序中使用 - 因此将被调用仅一次。我怀疑所有这些额外的样板是否值得。

所以,我可能会考虑更简单的方法:

2) 忽略(禁用)这个特定案例的特定警察。约定很好,rubocop 也很棒,但有时打破规则比盲目遵循规则会产生更简洁的代码。例如,我有时会为破坏性的 rake 任务添加测试——在这种情况下,我也必须打破这个约定,我会在必要时这样做,因为它仍然比为了约定而人工变通更好……需要测试一个初始化程序逻辑的一小部分?就去做吧:)