如何在 RSpec 等式匹配器 (Rails) 中使用 `or`

How to use `or` in RSpec equality matchers (Rails)

我正在尝试做类似

的事情
expect(body['classification']).to (be == "Apt") || (be == "House")

背景:

这是在测试 JSON API 响应。

问题:

如果返回 "Apt" 或 "House",我希望测试通过。但在测试中,它仅与第一个值 "Apt".

进行比较
Failure/Error: expect(body['classification']).to be == "Apt" or be == "House"

expected: == "Apt"
got:    "House"

上一个解法:

这里有一个解决方案, (Equality using OR in RSpec 2) 但它现在贬值了,我无法让它发挥作用。

文档:

也无法在文档中找到这样的示例 (https://www.relishapp.com/rspec/rspec-expectations/v/3-4/docs/built-in-matchers/equality-matchers)

这可以吗?

这个怎么样:

expect(body['classification'].in?(['Apt', 'Hourse']).to be_truthy

或者

expect(body['classification']).to eq('Apt').or eq('Hourse')

甚至这样:

expect(body['classification']).to satify { |v| v.in?(['Apt', 'Hourse']) }
expect(body['classification']).to eq("Apt").or eq("House")

基于此link

"复合预期

匹配器可以使用 and or or 组成复合期望

使用or 链接预期

RSpec.describe StopLight, "#color" do
  let(:light) { StopLight.new }
  it "is green, yellow or red" do
    expect(light.color).to eq("green").or eq("yellow").or eq("red")
  end