Angularjs .toBe()和.toEqual()之间的差异-Jasmine Karma测试用例

Angularjs .toBe()和.toEqual()之间的差异-Jasmine Karma测试用例,angularjs,jasmine,karma-jasmine,Angularjs,Jasmine,Karma Jasmine,我使用Jasmine karma测试用例有一段时间了,发现测试失败的原因是使用了.toBe()而不是.toEqual()。.toBe()和.toEqual()之间有什么区别?当您使用它们时?根据我的经验,toBe用于比较字符串、布尔值,例如: expect(enabled).toBe(true) expect(user.name).toBe('Bob') expect(myArray).toEqual([1,2,3]) toEqual更适合于比较数组或对象。例如: expect(enable

我使用Jasmine karma测试用例有一段时间了,发现测试失败的原因是使用了.toBe()而不是.toEqual()。.toBe()和.toEqual()之间有什么区别?当您使用它们时?

根据我的经验,
toBe
用于比较字符串、布尔值,例如:

expect(enabled).toBe(true)
expect(user.name).toBe('Bob')
expect(myArray).toEqual([1,2,3])
toEqual
更适合于比较数组或对象。例如:

expect(enabled).toBe(true)
expect(user.name).toBe('Bob')
expect(myArray).toEqual([1,2,3])
  • toBe()
    比较严格(例如:
    obj1===obj2

    如果比较两个对象,将考虑对象的身份。

  • toEqual()


    • 下面是一个例子,解释了两者之间的区别

      describe("Included matchers:", function() {
      it("The 'toBe' matcher compares with ===", function() {
      var a = 12;
      var b = a;
      
      expect(a).toBe(b);
      expect(a).not.toBe(null);
      });
      
      describe("The 'toEqual' matcher", function() {
      
      it("works for simple literals and variables", function() {
        var a = 12;
        expect(a).toEqual(12);
      });
      
      it("should work for objects", function() {
        var foo = {
          a: 12,
          b: 34
        };
        var bar = {
          a: 12,
          b: 34
        };
        expect(foo).toEqual(bar);
      });
      });
      });
      

      您可以在官方的

      toEqual
      不执行
      =检查中找到有关其他匹配者的更多详细信息
      toEqual
      与下划线
      isEqual
      方法比较类似,它首先检查a和b之间的非对称匹配,它还允许您提供自定义匹配函数的数组,以及检查值之间的不平等性。查看
      toEqual
      使用的
      eq
      功能。这允许对象值匹配、数组值匹配等@DavidBarker你说得对,我把这个概念简化了一点。。。