首页 > 解决方案 > 期望调用某个函数

问题描述

我有一个onChange监听器,我想确保监听器被调用。

我确实有可以工作的代码,但看起来很奇怪。

test('on change should be invoked when deleting', async () => {
    expect.assertions(1);
    someTestThing.onChange.sub(() => expect(true).toBe(true));
    await someTestThing.delete(TEST_ID);
});

我指的expect(true).toBe(true)是看起来不对的部分。

编辑:

我想我也可以这样做,这似乎更合理一些,实际上我很喜欢它:

test('on change should be invoked when deleting', async () => {
    const cb = jest.fn();
    someTestThing.onChange.sub(cb);
    await someTestThing.delete(TEST_ID);
    expect(cb.mock.calls.length).toBe(1);
});

标签: typescriptjestjs

解决方案


使用 Jest 的toHaveBeenCalled断言。

const someTestThing = {
  onChange: (event: Event) => console.log(event),
  delete: async (id: string) => console.log(id)
}

it('on change should be invoked when deleting', async () => {
  const mock = jest.fn(someTestThing.onChange);

  mock(new CustomEvent('Foo'));
  await someTestThing.delete('1')

  expect(mock).toHaveBeenCalled();
})

文档


推荐阅读