自定义Rails初始化程序作为一个类

时间:2020-03-18 22:05:02

标签: ruby-on-rails ruby-on-rails-6

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

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

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

假设这是合理的,那么将初始化程序转换为类的选项有哪些?

有一个使用describe XYZ的选项,但这似乎不合适。

1 个答案:

答案 0 :(得分:1)

1)好吧,您可以将Hash[*CSV.open...]包装到一些辅助类或模块中,例如DataLoader,用测试覆盖它,然后像XYZ = DataLoader.do_stuff(filename)一样在初始化器中调用。

但是这种方法有一个“问题”:该类实际上是“愚蠢的”(根本没有添加任何自定义逻辑,只包装了stdlib中的几个方法),并且只会在初始化程序中使用-这样被称为一次。我怀疑所有这些额外的样板值得吗。

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

2)对于这种特殊情况,只需忽略(禁用)该特殊警察即可。约定是好的,rubocop很好,但是有时违反规则可以使代码更干净,而不是盲目遵循它们。例如,有时我会为破坏性的rake任务添加测试-在这种情况下,我也必须违反此约定,并且在必要时执行此约定,因为出于约定的目的,它仍然比人工变通方案更好...需要测试次要的初始化逻辑?只是做:)

相关问题