如何在karma / jasmine中比较对象属性而不是值?

时间:2017-12-07 16:01:08

标签: angular testing ionic-framework jasmine karma-runner

我是使用karma / jasmine进行单元测试的新手,我正在尝试测试两个相同类型但具有不同值的对象。这意味着,相同的属性,但每个对象具有不同的值,如下所示:

let myFirstObject: myType = {
    id: 1,
    name: "name1",
    //... some other properties, 
}

let mySecondObject: myType = {
    id: 2,
    name: "name2",
    //... some other properties, 
}

it('should be a true comparison', () => {
    expect(myFirstObject).toEqual(mySecondObject);
});

    我希望它是真的,因为类型和属性是相同的(结构是相同的),虽然存储的值是不同的。但是只有当两个项完全相等(属性和值)时才使用jasmine .toEqual()。 如何在karma / jasmine中对结构/类型进行比较而不考虑值?

(注意:我的项目是离子/角度IO,如果重要的话)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Object.Keys(myFirstObject)将返回一个键数组作为字符串。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

为什么不循环数组并检查mySecondObject.hasOwnProperty(key)?

Object.keys(myFirstObject).map(key => {
   expect(mySecondObject.hasOwnProperty(key)).toBe(true)
})

编辑:如果您使用的是打字稿,则可以使用界面来检查对象。 Interface type check with Typescript