【问题标题】:rspec not_to change from not behaving as expectedrspec not_to 从不按预期运行
【发布时间】:2012-10-02 19:24:19
【问题描述】:

我在 rspec 和 rspec-rails 2.11.0 中遇到了一些令人费解的行为。我在运行 2.7.1 的同事应用程序上重现了该行为(均在 ruby​​ 1.9.3 上)

这些测试按预期工作(失败):

it "should not change i" do
    i = 0
    expect {
      i = 2
    }.not_to change { i }
end

it "should not change i" do
    i = 0
    expect {
      i = 2
    }.not_to change { i }.from( 0 )
end

在这两种情况下,失败消息都是“结果不应该改变,但确实从 0 变为 2”

无论期望块中 i 的值发生什么变化,将期望中的“来自”更改为不同的值都会莫名其妙地使其通过,而不是失败:

it "should not change i" do
    i = 0
    expect {
        i = 2
    }.not_to change { i }.from( 1 )
end

我最近才升级到 1.9.3,我可以肯定地说,如果我之前经历过这种行为,我会注意到它。谁能解释这个和/或我做错了什么?

【问题讨论】:

    标签: ruby-on-rails rspec2 rspec-rails


    【解决方案1】:

    我不认为它完全符合您的期望,但是编写测试的方式并没有真正暴露这一点。您的最后一个值失败,因为它从未定义为 1。

    揭示这一点的主要步骤是反转测试。

    describe "stuff" do
    
      it "should not change i" do
          i = 0
          expect {
            i = 2
          }.to change { i }
      end
    
      it "should not change i" do
          i = 0
          expect {
            i = 2
          }.to change { i }.from( 0 )
      end
    
    
      it "should not change i" do
          i = 0
          expect {
              i = 2
          }.to change { i }.from( 1 )
      end
    
    end
    

    这导致前两个测试通过,最后一个测试失败并出现错误result should have initially been 1, but was 0

    因此,如果我们按原样进行问题测试,您说的是i should not change from 1,并且由于 i 永远不会是 1,因此此测试将永远不会失败。

    it "should not change i" do
        i = 0
        expect {
            i = 2
        }.not_to change { i }.from( 1 ) # i goes from 0 to 2, not 1 to 2, so the test is valid
    end
    

    【讨论】:

    • 按照您的逻辑,“not_to change from”测试不应该失败并显示相同的消息吗?如果某物一开始不是 1,那么它是如何真实的并因此传递的?是否有一些我在这里遗漏的文档可以更好地解释这一点?
    • @JCSG 不,您正在测试该块不会从 1 更改值,并且由于该值永远不是 1,因此该语句成立。那有意义吗?当您测试确实需要from(i) == i的阳性案例(to_change)时
    • 我想如果这很重要的话,总要对初始值进行单独的测试。不管怎样,谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2020-06-28
    • 2012-02-18
    • 2018-01-18
    相关资源
    最近更新 更多