代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm Alex Wayne

如何避免rspec中的“==在无效上下文中的无用使用”?

  •  14
  • Andrew Grimm Alex Wayne  · 技术社区  · 15 年前

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

    x.should == 42
    another_line_of_code
    

    然后我得到一个关于

    warning: useless use of == in void context
    

    除此之外我还能做什么吗

    1. 关闭警告
    2. 把它改成 bitbucket = (x.should == 42)
    3 回复  |  直到 12 年前
        1
  •  7
  •   Ivan -Oats- Storck    14 年前

    您也可以使用 actual.should be == expected . 这完全取决于你认为漂亮的东西!

        2
  •  23
  •   Gerry    13 年前

    用途:

    x.should eq(42)
    

    或:

    x.should be == 42
    

    或移动 x.should == 42 所以这是最后一行 块。


    对于那些思考 但是为什么呢?

    我对鲁比来说是个彻头彻尾的笨蛋,但我的理解是:

    这个警告来自Ruby,比如 x.In==42 1 == 1 返回一个值。如果实际上没有使用这个返回值(例如,分配给一个变量,用作函数的参数或从块返回),那么Ruby可以理解的是,首先看不到使用该语句的意义,并向您发出警告。

    要测试这一点,您可以使用-w标志启动IRB并添加以下代码:

    > irb -w
    
    def example
      1 == 1
      :hello
    end
    

    1==1应该发出一个关于void上下文中无用==的警告。试着不使用:hello行,你不会得到警告,因为 1=1 然后将用作返回语句。

    我知道手术室和这里的其他人已经明白这一点。然而,我想把这篇文章发给像我这样的人,他们可能想知道为什么要发出警告,为什么要提出解决方案来解决这个问题。

        3
  •  21
  •   David Chelimsky    15 年前

    RSPEC-2有一个 eq(expected) 工作原理和 == 没有警告:

    actual.should eq(expected)