gpt4 book ai didi

ruby - 何时在 expect Rspec 方法中使用大括号与圆括号?

转载 作者:数据小太阳 更新时间:2023-10-29 06:29:36 24 4
gpt4 key购买 nike

我有一个测试是这样做的:

expect(@parser.parse('adsadasdas')).to raise_error(Errno::ENOENT)

但它没有用。我改为:

expect { @parser.parse('adsadasdas') }.to raise_error(Errno::ENOENT)

它奏效了。

我们什么时候使用大括号,什么时候使用圆括号?

最佳答案

为了回应 OP 的评论,我编辑并完全重写了我的答案。我意识到我原来的答案被过于简单化了,以至于它可能被认为是不正确的。

您的问题实际上已被另一个 StackOverflow question 解决了.

一张海报,Peter Alfvin , 当他说:

As for rules, you pass a block or a Proc if you're trying to test behavior (e.g. raising errors, changing some value). Otherwise, you pass a "conventional" argument, in which case the value of that argument is what is tested.

您遇到所见现象的原因与错误的产生有关。当您将 @parser.parse('adsadasdas') 作为参数(使用括号)传递给 expect 时,您实际上是在告诉 ruby​​:

  1. 首先评估 @parser.parse('adsadasdas')
  2. 获取结果并将其传递给 expect
  3. expect 应该看看这个结果是否符合我的预期(也就是说,Errno:ENOENT 将被提高)。

但是,发生的事情是:当 ruby​​ 评估 @parser.parse('adsadasdas') 时,会立即出现错误。 Ruby 甚至没有机会将结果传递给 expect。 (就我们所关心的而言,您可以将 @parser.parse('adsadasdas') 作为参数传递给任何函数...例如 multiply() capitalize()) 引发错误,expect 甚至没有机会完成它的工作。

但是,当您使用花括号将 @parser.parse('adsadasdas') 作为 proc(代码块)传递给 expect 时,您告诉 ruby​​ 的是这个:

  1. 期待,准备做一些工作。
  2. expect,我希望您跟踪我们评估 @parser.parse('adsadasdas') 时发生的情况。
  3. 好的,预期,刚刚评估的代码块是否引发了Errno:ENOENT 错误?我期待它会。

当您将代码块传递给 expect 时,您是在告诉 expect 您希望它检查代码块执行所产生的结果行为、更改,然后让您知道它是否符合您提供的期望。

当您将一个参数传递给 expect 时,您是在告诉 ruby expect 之前评估该参数以达到某个值 甚至参与其中,然后您将该值传递给 expect 以查看它是否符合某些期望。

关于ruby - 何时在 expect Rspec 方法中使用大括号与圆括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21567838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com