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

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

问题描述:

在RSpec的,如果我有警告和有如何避免RSpec中的“无效使用==在void context中”?

x.should == 42 
another_line_of_code 

然后我得到一个警告约

warning: useless use of == in void context 

有什么我可以做其他的比

  1. 打开警告关闭
  2. 更改为bitbucket = (x.should == 42)

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

RSpec的-2有一个eq(expected)匹配的作品就像==没有警告:

actual.should eq(expected) 

用途:

x.should eq(42) 

或者:

x.should be == 42 

或移动x.should == 42,这样它的块内的最后一行。


对于那些想法但是为什么?

我是一个完整的小白到Ruby,但这里是我的理解:

的警告来自红宝石像x.should == 42陈述或者1 == 1返回值。如果这个返回值没有被实际使用(例如,分配给一个变量,用作函数的参数或者从该块返回),那么Ruby可以理解地认为没有必要首先使用该语句并提醒您这一点。

为了测试这一点,你可以用-w标志推出IRB并添加以下代码:

> irb -w 

def example 
    1 == 1 
    :hello 
end 

的1 == 1应该发出关于无效的情况下无用的==警告。尝试它没有:你好行,你不会得到警告,因为1 == 1将被用作返回语句。

我知道欧普和其他人在这里已经明白这一点。不过,我想将此发布给像我这样的人,他们可能想知道为什么会发出警告,以及为什么提出的解决方案解决了这个问题。

+1

这应该是上下文的接受答案。 – expressions 2016-12-27 23:32:31