如何避免在RSpec中“无用地使用== in void context”?

时间:2010-09-05 08:43:35

标签: ruby rspec warnings

在RSpec中,如果我有警告并且有

x.should == 42
another_line_of_code

然后我收到关于

的警告
warning: useless use of == in void context

除了

,我能做些什么
  1. 关闭警告
  2. 将其更改为bitbucket = (x.should == 42)

3 个答案:

答案 0 :(得分:23)

使用:

x.should eq(42)

或者:

x.should be == 42

或移动x.should == 42,使其成为 it 区块内的最后一行。


对于那些想但为什么?

的人

我是Ruby的完全菜鸟,但这是我的理解:

警告来自Ruby,因为x.should == 421 == 1等语句会返回一个值。如果实际上没有使用这个返回值(例如,分配给一个变量,用作函数的参数或从块中返回),那么Ruby可以理解地认为没有必要首先使用该语句并提醒您。 / p>

要对此进行测试,您可以使用-w标志启动irb并添加以下代码:

> irb -w

def example
  1 == 1
  :hello
end

1 == 1应该在void上下文中发出关于无用==的警告。在没有:hello行的情况下尝试它,你将不会得到警告,因为1 == 1将被用作return语句。

我知道Op和其他人已经理解了这一点。但是我想把这个发给像我一样的人,他们可能想知道为什么要抛出警告以及为什么提出的解决方案解决了这个问题。

答案 1 :(得分:21)

RSpec-2有一个eq(expected)匹配器,就像==一样没有警告:

actual.should eq(expected) 

答案 2 :(得分:7)

您也可以使用actual.should be == expected。它取决于你认为看起来更漂亮的东西!