我有一个初始化器来将一些数据从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,但它似乎不正确。
发布于 2020-03-18 22:57:26
1)好的,您可以将Hash[*CSV.open...]封装到某个助手类或模块中,比如DataLoader,用测试覆盖它,然后在初始化器中调用类似XYZ = DataLoader.do_stuff(filename)。
但是这种方法有一个“问题”:类将是真正的“哑”(完全不添加自定义逻辑,只从stdlib包装几个方法),并且只在初始化器中使用-因此只需要调用一次。我怀疑这些额外的样板是否值得。
所以,我可能会考虑一些更简单的事情:
2)只需忽略(禁用)这一特定案例的特定cop。约定是好的,rubocop是很棒的,但有时违反规则会导致代码比盲目地遵循更干净。例如,我有时为破坏性的耙任务添加测试--在这种情况下,我也必须打破这个约定,必要时我会这样做,因为为了约定,它仍然比人为的解决方案更好……需要测试一小块初始化程序的逻辑吗?就这么做吧:)
https://stackoverflow.com/questions/60748135
复制相似问题