【问题标题】:Break RSpec matcher to multiple lines将 RSpec 匹配器拆分为多行
【发布时间】:2025-12-03 00:35:01
【问题描述】:

有没有办法将长 RSpec 行分成两个单独的行:

expect(....).to
   eq(.....)

?

更新

现在我有一个错误:

失败/错误: 期望(@query_builder.questions_from_time(@time_to_test)).to 参数错误: expect 语法不支持运算符匹配器,因此您必须将匹配器传递给#to

如果我删除换行符,错误就会消失

【问题讨论】:

  • 您可以像任何其他 Ruby 代码一样中断。你有什么问题?如果出现更多空格/断行问题,使用更多括号来帮助 Ruby 解析代码可能会很有用。
  • 我已经更新了我的问题

标签: ruby rspec


【解决方案1】:

to 在技术上只是一种方法,但常见的风格是在 rspec 中去掉to 方法上的括号。但是,如果您将其分隔到没有括号的新行,Ruby 解析器似乎没有意识到您正在尝试向该 to 方法发送参数。

以下任何一项都应该有效……

expect(....).
  to eq(.....)

expect(....)
  .to eq(.....)

expect(....).to eq(
  .....
)

expect(
  ....
).to eq(.....)

expect(
  ....
).to eq(
  .....
)

我想它的长短只是“不要在没有被括号包围的论点之前中断”。至于使用哪一个——这取决于特定的代码。我会做任何最容易阅读的事情并保持行长相当短。

【讨论】:

    【解决方案2】:

    您可以在行尾使用反斜杠向 ruby​​ 指示该行继续:

    expect(...).to \
      eq(...)
    

    【讨论】:

      最近更新 更多