Rspec:应该是(这个或那个)

发布于 2024-12-12 10:42:13 字数 311 浏览 0 评论 0原文

在两个(或更多)结果之一可接受的情况下,编写 rspec 的最佳方式是什么?

这是我想做的一个例子。这显然是错误的(我认为),但它应该给你我想要完成的要点:

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

是的,我知道我可以编写自己的 rspec 匹配器“should_be_one_or_the_other(option1,option2)”,但是似乎有点多 - 我希望有更好的解决方案。

What would be the best way to write the rspec in a situation where either of two (or more) outcomes are acceptable?

Here's an example of what I want to do. This is obviously wrong (I think), but it should give you the gist of what I'm trying to accomplish:

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

And yes, I'm aware I could write my own rspec matcher "should_be_one_or_the_other(option1,option2)", but that seems a bit much - I was hoping for a better solution.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

不回头走下去 2024-12-19 10:42:13

ActiveSupport 提供了Object#in? 方法。您可以将它与 RSpec 结合起来,只需使用以下内容:

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

或者使用新的 Rspec 3 语法:

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

ActiveSupport provides Object#in? method. You can combine it with RSpec and simply use the following:

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

Or with new Rspec 3 syntax:

expect(flip_coin).to be_in(["heads", "tails"])
吲‖鸣 2024-12-19 10:42:13

我知道这已经很旧了,但我在 RSpec 3.4 上遇到了这个,有一个 方法现在。所以这是有效的:

expect(flip_coin).to eq('heads').or(eq('tails'))

I know this is old but in I ran into this on RSpec 3.4, there is an or method now. So this is valid:

expect(flip_coin).to eq('heads').or(eq('tails'))
萌面超妹 2024-12-19 10:42:13

我可能会写这样的东西:

it "should be heads or tails" do
  ["heads", "tails"].should include flip_coin
end

I'd probably write something like this:

it "should be heads or tails" do
  ["heads", "tails"].should include flip_coin
end
莫言歌 2024-12-19 10:42:13

另一种将期望放在“应该”右侧的写法:

it 'should be heads or tails' do
  flip_coin.should satisfy{|s| ['heads', 'tails'].include?(s)}
end

Another way of writing it with the expectation on the right of the should:

it 'should be heads or tails' do
  flip_coin.should satisfy{|s| ['heads', 'tails'].include?(s)}
end
命硬 2024-12-19 10:42:13

如果应用 orbe 匹配器

expect(flip_coin).to eq('heads').or(be == 'tails')

if applied or with be matcher

expect(flip_coin).to eq('heads').or(be == 'tails')
孤单情人 2024-12-19 10:42:13

您可以通过翻转比较来解决此问题:

expect(['head','tails']).to include(flip_coin)

You can solve this by flipping the comparison:

expect(['head','tails']).to include(flip_coin)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文