rspec - 其中一个选择的匹配器

Pet*_*vic 6 ruby rspec

我有方法从预定义的数组返回随机值(即:)[ 'value1', 'value2'].我该如何用rspec测试?

我想做点什么:

expect(FooClass.new.value).to be_in ['value1', 'value2']
Run Code Online (Sandbox Code Playgroud)

有办法吗?谢谢.

Ale*_*der 9

另外,还有一个or

expect('value').to eq('value1').or eq('value2')
Run Code Online (Sandbox Code Playgroud)

优点:

  1. 听起来就像普通的英语。
  2. 错误消息有点长,但包含所有相关信息:
expected: "value1"
    got: "value"

...or:

expected: "value2"
    got: "value"
Run Code Online (Sandbox Code Playgroud)
  1. 正如muirbot指出的那样,您应该将正在测试的值传递给expect(),而不是相反。

  2. 它更灵活,如果有人来这里寻找类似以下问题的解决方案,它会起作用:

expect({one: 1, two: 2, three: 3}).to have_key(:one).or have_key(:first)
Run Code Online (Sandbox Code Playgroud)


San*_*osh 8

用这个

expect(['value1', 'value2']).to include(FooClass.new.value)
Run Code Online (Sandbox Code Playgroud)

或者简单的布尔匹配

expect(['value1', 'value2'].include? FooClass.new.value).to be true
Run Code Online (Sandbox Code Playgroud)