Как смоделировать вызовы обратного вызова, переданные в качестве параметра? - PullRequest
0 голосов
/ 29 апреля 2020

Я хотел бы знать, как имитировать вызовы обратного вызова, переданного в качестве параметра:

type YesOrNoHandler = (yesOrNo: boolean) => void
type CheckValue = (val: string, handler: YesOrNoHandler)

В этом примере я хотел бы имитировать вызовы параметра handler: YesOrNoHandler, который представляет обратный вызов.

const check = jest.fn().mockImplementation((_, handler) => {
   handler(true) // how to call `handler` outside of this scope ?
})

На самом деле, я даже не уверен, что должен использовать шутку для этого. У кого-нибудь есть идеи, как этого добиться?

1 Ответ

1 голос
/ 30 апреля 2020

Просто присвойте handler переменной, определенной снаружи.

Например,

describe('61504714', () => {
  it('should pass', () => {
    let handlerRef;
    const check = jest.fn().mockImplementation((_, handler) => {
      console.log('call check');
      handlerRef = handler;
    });
    const callback = jest.fn((yesOrNo: boolean) => (yesOrNo ? 'yes' : 'no'));
    check('_', callback);
    expect(callback).not.toBeCalled();
    const rval = handlerRef(true);
    expect(rval).toBe('yes');
    expect(check).toBeCalledWith('_', callback);
    expect(callback).toBeCalledWith(true);
  });
});

Результаты теста:

 PASS  stackoverflow/61504714/index.test.ts (11.463s)
  61504714
    ✓ should pass (33ms)

  console.log stackoverflow/61504714/index.test.ts:5
    call check

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        13.581s
...