如何使用 Jest 匹配器匹配通配符对象键?

问题描述 投票:0回答:1

假设你有这个值,你无法预测

foo
中键的值:

{
  context: { version: 1.0 },
  value: {
    foo: {
      afh34q2: [1n, 100n],
    }
  }
}

如何编写一个严格的匹配器,将键视为通配符并仅对值进行断言?

expect(value).toStrictEqual({
  context: expect.objectContaining({
    version: expect.any(String),
  }),
  value: {
    foo: /* how to match on only the object values? */
  }
});
javascript jestjs wildcard matcher
1个回答
0
投票

我认为没有办法在单个断言中描述包含动态键的对象,可能是因为如果您像这样定义断言

// ... 
foo: expect.objectContaining({ [expect.any(String)]: [1n, 100n] })

没有办法用多个键、预期键的数量或不同的可能值来定义匹配器对象。

所以我要做的就是在

value.foo
属性上编写一个单独的断言,如下所示

    test('should have string keys and number array values', () => {
        expect(Object.entries(value.value.foo)).toEqual([
            [expect.any(String), [1, 100]]
        ]);
    });

repl.it 示例

© www.soinside.com 2019 - 2024. All rights reserved.