代码之家  ›  专栏  ›  技术社区  ›  user4445419

Mocha和should断言和不按预期工作

  •  1
  • user4445419  · 技术社区  · 9 年前

    我使用Mocha和should作为节点js模块的测试框架。 到目前为止,它还可以,现在我需要断言两个对象相等。 当对象相同时(我使用webStorm 10),Diff窗口显示两个对象,并且它们相同(我在Diff窗口中也看到消息内容相同…)

    它可能是什么?有办法克服这个问题吗?

    我尝试两种都失败了

    should(inObjBefore).be.exactly({env: outObjAfter});
    
     inObjBefore.should.be.exactly({ env: outObjAfter});
    
    3 回复  |  直到 9 年前
        1
  •  1
  •   danillouz    9 年前

    exactly 使用严格相等进行精确比较,即。 === . 在javascript中,对象是按引用而不是按值存储的。因此,当比较两个对象时,它们只有在引用相同时才相等:

    var a = {
      x: 10
    };
    
    a === a // true
    a === { x: 10 } // false
    

    因此,您需要与同一对象进行比较,或者可以使用 deepEqual .

        2
  •  0
  •   bastijn    9 年前

    我现在不能测试这个,但它可能是应该的。确切地说,当您有两个实例并且您有兴趣知道它们的属性是否相等时,检查完全相同的对象实例。

    即。

    A = object.with.name.is.Joe
    B = otherObject.with.name.is.Joe
    a.should.equal(b) = true
    À.should.be.exactly(b) = false
    

    对不起,我的电话,无法验证。

        3
  •  0
  •   den bardadym hakatashi    9 年前

    您需要使用深度对象比较。使用.eql或.depEqual(别名为.eql)。 .完全与.equal相同,并与==进行引用比较。