如何断言某个函数是通过另一个回调函数调用的

时间:2019-10-08 09:37:39

标签: reactjs jestjs react-testing-library

我有一个使用React的项目,其中react-testing-libraryjest-dom用于单元测试。我刚开始使用这些测试库,并希望获得一些帮助。

我使用jest模拟了一个静态函数,像这样...

vanUnderscore.js

export default class VanUnderscore {
    static debounce = (func, wait, immediate) => {...

上面的函数可以这样称呼...

VanUnderscore.debounce(() => legalCoverFilterClick(mustInclude), clickDelay)();

我想单元测试是否调用了VanUnderscore.debounce()函数,还想用参数legalCoverFilterClick()调用true

这是单元测试文件...

test.js

import VanUnderscore from '../../helpers/utility/vanUnderscore';

jest.mock('../../helpers/utility/vanUnderscore');

稍后在test.js中,这是使用模拟的静态函数的单元测试。

it('should include policies with "Legal Cover" when selected to filter', () => {
    const mockStaticDebounce = jest.fn((callback, delay) => {
      console.log('mockStaticDebounce called');

      console.log(callback);
      callback();

      return () => {};
    });

    VanUnderscore.debounce = mockStaticDebounce.bind(VanUnderscore);

    const legalCoverFilterClick = jest.fn();

    const { container } = render(
      <BenefitsFilters
        isPolicyForSocialUse={true}
        onLegalCoverFilterClick={legalCoverFilterClick}
      />
    );

    const legalCoverFilterCheckbox = container.querySelector('#legal-cover-filter');
    legalCoverFilterCheckbox.checked = true;

    fireEvent.click(legalCoverFilterCheckbox);

    expect(mockStaticDebounce).toHaveBeenCalledWith(expect.any(Function), 1000);
    //expect(legalCoverFilterClick).toHaveBeenCalledWith(true);

    mockStaticDebounce.mockClear();
});

线路...

expect(mockStaticDebounce).toHaveBeenCalledWith(expect.any(Function), 1000);

通过。但是,以下内容无法通过...

expect(legalCoverFilterClick).toHaveBeenCalledWith(true);

相反,我看到了Expected: true Number of calls: 0

在控制台输出中,我看到console.log('mockStaticDebounce called');已执行。

有人可以告诉我是否可以断言传递给legalCoverFilterClick()的{​​{1}}已经被调用,请传递给它什么参数?

0 个答案:

没有答案