jestjs - 开 Jest ,我如何使用 "toHaveBeenCalledWith"并且只匹配数组参数中对象的一部分?

标签 jestjs mocking ts-jest

我正在使用 Typescript 和 Jest。在 Jest 中,如果我想检查我的函数是否被调用,我可以运行

expect(myMockFn).toHaveBeenCalledWith(arrayArgument);
我想检查是否使用包含具有某些值的对象的数组参数调用了我的函数。例如,
expect(myMockFn).toHaveBeenCalledWith( [{x: 2, y: 3}] );
实际调用是使用一个看起来像的参数进行的
[{x: 2, y: 3, id: 'some-guid'}]
所以我的期望失败了,因为我在数组的第一个对象中没有 id 属性,但我想匹配并忽略 ID,因为它每次都会不同,即使其他参数相同。我如何用 Jest 构建这样一个期望调用?

最佳答案

您可以使用 arrayContaining 的组合和 objectContaining使这项工作。
引用:

  • https://jestjs.io/docs/expect#expectarraycontainingarray
  • https://jestjs.io/docs/expect#expectobjectcontainingobject

  • 以下是一些示例代码:
    function something(a, b, somefn) {
        somefn([{
            x: a,
            y: b,
            id: 'some-guid'
        }]);
    }
    test('Testing something', () => {
        const mockSomeFn = jest.fn();
        something(2, 3, mockSomeFn);
        expect(mockSomeFn).toHaveBeenCalledWith(
            expect.arrayContaining([
                expect.objectContaining({
                    x: 2,
                    y: 3
                })
            ])
        );
    });
    
    示例输出:
    $ jest
     PASS  ./something.test.js
      ✓ Testing something (3 ms)
    
    Test Suites: 1 passed, 1 total
    Tests:       1 passed, 1 total
    Snapshots:   0 total
    Time:        0.257 s, estimated 1 s
    Ran all test suites.
    ✨  Done in 0.84s.
    
    这里有一些解释:
  • toHaveBeenCalledWithexpect.arrayContaining 调用验证是否使用数组
  • 调用它
  • expect.arrayContaining有一个数组。该数组有一个对象 objectContaining它与对象进行部分匹配。
  • 关于jestjs - 开 Jest ,我如何使用 "toHaveBeenCalledWith"并且只匹配数组参数中对象的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67944090/

    相关文章:

    reactjs - Expect(...).toBeInTheDocument 设置后不是函数

    typescript - Visual Studio代码无法正确踩入TypeScript代码

    javascript - 用 enzyme 测试重组的 HOC

    reactjs - React-Testing 库未在快照中呈现 Material-UI 对话框

    Python:在模拟补丁类装饰器上调用停止

    c# - NSubstitute 虚拟 getter 使用 ForPartsOf 返回替换抛出异常

    testing - 如何使用带有 react-apollo 的模拟数据进行测试

    python - pytest fixture 中的 pytest-mock mock 者

    typescript - TS-Jest 无法解析 tsconfig 路径

    javascript - Transpile 验证器 esm node_modules 文件 jest