玩笑断言-包含密钥的对象

时间:2018-07-13 10:54:42

标签: jestjs

在玩笑中,我需要测试一个可以为null或对象的期望值

{
  main: {
    prop1: 'abc',
    prop2: '123',
  }
}

但是,如果它是一个对象,那么我真的不在乎main包含什么,我不在乎prop1prop2。我只需要断言该对象包含一个名为main的密钥即可。

Jest reference提到了objectContaining,但仍然需要我至少指定props中的一个,这样会使我的代码不必要地冗长。

是否有任何快速的方法来实现可以命名为objectContainingKey的断言,例如:

expect(something).toEqual(expect.objectContainingKey('main'))

3 个答案:

答案 0 :(得分:1)

或者您可以通过一些棘手的方式完成

const something = { main: { prop1: 'abc', prop2: '123' } }

expect(Object.keys(something).toString()).toBe('main')

expect(Object.keys(something.main).toString()).toBe('prop1')
expect(Object.keys(something.main).toString()).toBe('prop2')

expect(Object.keys(something.main))
  .toEqual(expect.arrayContaining(['prop1', 'prop2']))

答案 1 :(得分:1)

文档have something比接受的答案更合适,更易读:

expect(obj.main).toBeDefined();

答案 2 :(得分:1)

假设

const something = {
  main: {
    prop1: 'abc',
    prop2: '123',
  }
}

然后您可以使用 objectContainingany 来检查 something 是一个包含键 main 的对象,该键包含一个对象

expect(something).toEqual(
  expect.objectContaining({
    main: expect.any(Object),
  });
);