首页 > 解决方案 > Jasmine 期望 toEqual 但忽略实际对象上的其他属性以防止“期望......没有属性......”

问题描述

有时我只需要断言实际对象的特定属性,而不关心其他属性。

例如:

const actual = [
  { a: 1, additionalProp: 'not interestig' },
  { a: 2, additionalProp: 'not interestig' }
];

expect(actual).toEqual([
  { a: 1 },
  { a: 2 }
])

这目前失败:

预计 $[0] 没有属性
AdditionalProp: 'random value'

我该如何写期望?

我目前做这样的事情:

expect(actual.map(i => ({a: 1}))).toEqual([
  { a: 1 },
  { a: 2 }
])

但我不太喜欢它,它不适用于更复杂的对象

标签: javascriptjasmine

解决方案


您可以显式处理特定对象及其相关属性吗?

expect(actual.length).toBe(2);
expect(actual[0]['a']).toBe(1);
expect(actual[1]['a']).toBe(2);

另一种方法是使用jasmine.obectContaining. 如果预期对象包含多个属性,这可能更合适。

const expected = [
    { a: 1 },
    { a: 2 }
];
expect(actual.length).toBe(expected.length);
for (let i = 0; i < expected.length; i++) {
    expect(actual[i]).toEqual(jasmine.objectContaining(expected[i]));
}

推荐阅读