我有一个初始化程序,可以将一些数据从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
的选项,但这似乎不合适。
答案 0 :(得分:1)
1)好吧,您可以将Hash[*CSV.open...]
包装到一些辅助类或模块中,例如DataLoader
,用测试覆盖它,然后像XYZ = DataLoader.do_stuff(filename)
一样在初始化器中调用。
但是这种方法有一个“问题”:该类实际上是“愚蠢的”(根本没有添加任何自定义逻辑,只包装了stdlib中的几个方法),并且只会在初始化程序中使用-这样被称为一次。我怀疑所有这些额外的样板值得吗。
所以,我可能会考虑一些更简单的方法:
2)对于这种特殊情况,只需忽略(禁用)该特殊警察即可。约定是好的,rubocop
很好,但是有时违反规则可以使代码更干净,而不是盲目遵循它们。例如,有时我会为破坏性的rake任务添加测试-在这种情况下,我也必须违反此约定,并且在必要时执行此约定,因为出于约定的目的,它仍然比人工变通方案更好...需要测试次要的初始化逻辑?只是做:)