Причина, по которой вы получаете эту ошибку, заключается в том, что action
возвращает обещание, а вы не ожидаете результата этого обещания;когда fn1
вызывается во второй раз, когда ваш тест не пройден из-за этой строки expect(fn1).nthCalledWith(2, 'fn1 call 2')
, следовательно, вы видите ошибку.Кроме того, вызов Promise.resolve('test')
в jest.fn().mockResolvedValue();
является избыточным , см. Документ
. Чтобы исправить это, вам нужно дождаться результата action
:
describe('test case', () => {
it('should pass', async () => {
const fn1 = jest.fn();
const fn2 = jest.fn()
.mockResolvedValue('test');
await action(fn1, fn2);
expect(fn2)
.toBeCalledWith('fn2 call 1');
expect(fn1)
.nthCalledWith(1, 'fn1 call 1');
expect(fn1)
.nthCalledWith(2, 'fn1 call 2');
});
});
Другой подход:
describe('test case', () => {
it('should pass', (done) => {
const fn1 = jest.fn();
const fn2 = jest.fn()
.mockResolvedValue(Promise.resolve('test'));
action(fn1, fn2)
.then(() => {
expect(fn2)
.toBeCalledWith('fn2 call 1');
expect(fn1)
.nthCalledWith(1, 'fn1 call 1');
expect(fn1)
.nthCalledWith(2, 'fn1 call 2');
done();
});
});
});