Rubocop 25行块大小和RSpec测试
典型的RSpec单元测试大量使用嵌套的Ruby块,以构造代码并利用DSL的“魔力”使规范读取像BDD语句: describe Foo do context "with a bar" do before :each do subject { Foo.new().add_bar } end it "looks like a baz" do expect # etc 在理想的规格中,每个示例都可以相对简短和精确。然而它似乎平常有外块增长到100行好事,因为RSpec的结构以这种方式工作,并没有考虑很多规格的例子,每一个可能有特定设置的几行,去describe那是块大小等于或大于所描述主题的代码。 Rubocop的最新升级带来了一条新规则,该规则不得超过25行。我不确定它的基本原理,因为它没有在Ruby样式指南中列出。我可以看到为什么这会是一件好事,并将其添加到默认规则集中。但是,升级后,我们的Rubocop测试多次失败,并显示以下消息tests/component_spec.rb:151:3: C: Block has too many lines. [68/25] 对于像Rubocop这样的代码度量工具,我喜欢使用“使用默认值,链接到样式指南,完成工作”的策略。(主要是因为辩论制表符与空格以及其他细节浪费时间,而且IME从未得到解决)这显然是不可能的,我们的两个核心数据质量工具不同意代码布局方法-或至少这就是我解释结果的方式,我认为我们编写规范的方式并没有本质上的错误。 作为响应,我们仅将Rubocop块大小规则设置为高阈值。但这让我感到奇怪-我想念什么?RSpec是否在代码布局中使用了现在不可信的方法?在RSpec测试中,我必须采取哪些合理的选择来减小块大小?我可以看到重组代码以避免大块代码的方法,但是它们无一例外都是纯粹为了满足Rubocop规则的丑陋的骇客,例如将所有块分解为辅助函数: def looks_like_a_baz it "looks like a baz" do expect # etc end end …