开发者问题收集

使用 toHaveBeenNthCalledWith 时 React Jest 测试错误

2019-02-05
11493

我正在遵循 Jest 的 文档 ,但是我无法解决以下错误。 expect(dummyFunction).toHaveBeenNthCalledWith 不是函数

除非我遗漏了什么,否则我很确定我已将 dummyFunction 正确设置为 jest.fn() 。我甚至在测试中使用 dummyFunction 之前就对其输出进行了控制台处理,这就是输出。

dummyFunction console.log 输出

    { [Function: mockConstructor]
      _isMockFunction: true,
      getMockImplementation: [Function],
      mock: [Getter/Setter],
      mockClear: [Function],
      mockReset: [Function],
      mockReturnValueOnce: [Function],
      mockReturnValue: [Function],
      mockImplementationOnce: [Function],
      mockImplementation: [Function],
      mockReturnThis: [Function],
      mockRestore: [Function] }

toHaveBeenCalledNthWith Test

const dummyFunction = jest.fn();

expect(dummyFunction).toHaveBeenCalledTimes(2); // pass

expect(dummyFunction).toHaveBeenNthCalledWith(1, { foo: 'bar' }); // error
expect(dummyFunction).toHaveBeenNthCalledWith(2, { please: 'work' });

提前感谢您的帮助。

1个回答

toHaveBeenNthCalledWithJest 版本 23.0.0 中发布,因此如果您使用的是早期版本的 Jest ,您将看到该错误。

请注意, toHaveBeenNthCalledWith 只是 使用 spy.mock.calls[nth] 的语法糖,因此如果您使用的是早期版本的 Jest ,您只需执行以下操作:

const dummyFunction = jest.fn();

dummyFunction({ foo: 'bar' });
dummyFunction({ please: 'work' });

expect(dummyFunction).toHaveBeenCalledTimes(2); // pass

expect(dummyFunction.mock.calls[0]).toEqual([{ foo: 'bar' }]); // pass
expect(dummyFunction.mock.calls[1]).toEqual([{ please: 'work' }]); // pass
Brian Adams
2019-02-06