在两种(或两种以上)结果中任何一种都可以接受的情况下,编写rspec的最佳方式是什么?

下面是我想做的一个例子.这显然是错误的(我认为),但它应该给你我试图实现的要点:

it "should be heads or tails" do
  h="heads"
  t="tails"
  flip_coin.should be(h || t)
end

是的,我知道我可以编写自己的rspec matcher"应该是一个还是另一个(选项1,选项2)",但这似乎有点过分——我希望有更好的解决方案.

推荐答案

ActiveSupport提供了Object#in?种方法.您可以将其与RSpec结合使用,只需使用以下内容:

flip_coin.should be_in(["heads", "tails"])

或者使用新的Rspec 3语法:

expect(flip_coin).to be_in(["heads", "tails"])

Ruby相关问答推荐

数组切片中没有左边框的Ruby范围

RSpec 模拟对象示例

我在哪里可以找到积极开发的 Ruby lint 工具?

Ruby 哈希文字的顺序是否得到保证?

如果浮点组件不是 .00 sprintf/printf,则仅显示小数点

对具有相同键的 2 个哈希属性求和

osx bash上的树命令

Ruby 中的 -> (stab) 运算符是什么?

以条件方式构建哈希

如何获取从位置 N 到 Ruby 中最后一个字符的子字符串?

在现有 Jekyll 安装中切换主题

使用 `?`(问号)在 Ruby 中获取 ASCII 字符代码失败

rbenv install --list 不列出 2.1.2 版本

如何使用 Nokogiri 删除 node ?

向实例对象添加方法

如何判断变量是数字还是字符串?

`gem install therubyracer` 在 Mac OS X Lion 上失败

Eclipse 的首选 Ruby 插件?

从 'mm/dd/yyyy' 格式解析 ruby​​ DateTime

严格将字符串转换为整数(或 nil)