【问题标题】:AngularJS service unit test fails on toEqualAngularJS 服务单元测试在 toEqual 上失败
【发布时间】:2013-07-02 18:47:43
【问题描述】:

我有以下 Jasmine 单元测试:

describe('getAlertsByUserId', function () {
    it('should get alerts from api/Alert/bob when the username is bob', inject(function (AlertService, $httpBackend) {
        $httpBackend.when('GET', 'api/Alert/bob').respond(mockAlerts);
        var alerts = AlertService.getAlertsByUserId('bob');
        $httpBackend.flush();
        expect(alerts).toEqual(mockAlerts);
    }));
});

mockAlerts 定义如下:

[{
        date: new Date(2013, 5, 25),
        description: '',
        alertType: 'type1',
        productDescription: 'product',
        pack: 12,
        size: 16,
        unitOfMeasure: 'OZ',
        category: 'cat1',
        stage: 'C',
        status: 'I'
}]

当我在 Karma 中执行测试时,我得到“预期 [ {date:...etc }] 等于 [ {date:...etc }]。我已验证这两个对象是相同的(属性 /值)。我尝试删除 Date 对象,但无济于事。有人吗?

【问题讨论】:

    标签: javascript angularjs jasmine karma-runner


    【解决方案1】:

    toEqual 将检查引用相等性,即警报对象与 mockAlerts 是相同的对象。您要检查的是对象相等性。有几种方法可以做到这一点。

    首先你可以将你的对象转换成 json

    expect(JSON.stringify(alerts)).toEqual(JSON.stringify(mockAlerts));
    

    这可能在大多数情况下都有效,但它确实取决于序列化程序以完全相同的方式处理对象。

    另一种方法是使用 angular.equals。

    expect(angular.equals(alerts, mockAlerts)).toBeTruthy();
    

    这可能不太好,但应该很好用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2019-12-01
      • 2011-08-22
      • 2011-10-05
      • 2021-08-28
      相关资源
      最近更新 更多