首页 > 解决方案 > 为什么在测试中没有调用模拟函数?

问题描述

我正在为一个组件编写测试。它有一个下载按钮。我想测试调用这个按钮的 onClick 函数。但它不起作用。我的测试有什么问题?

describe('download-button tests', () => {
  let wrapper:any;
  let _download = jest.fn(()=>{console.log('That`s Submit-button function')});

  jest.mock('../components/CustomButtonComponent', ()=>
    <button className="download" data-test ="download_button" type="submit" name="Скачать" onClick={_download}/>);

  beforeAll(() => {
    let wrapper = setupmount();
    const nextState = {
      ...initialState,
      selectedEntity: "1864296",
      disableTable: false,
    };
    wrapper.setState(nextState);
    console.log(wrapper.debug());
    console.log(findByTestAttr(wrapper, 'download_button').first().debug());
    findByTestAttr(wrapper, 'download_button').first().simulate('click');
  });

  test('download-button is clicked', () => {
    expect(_download).toBeCalled();
  });
});

结果如下console.log(findByTestAttr(wrapper, 'download_button').first().debug());

https://sun9-10.userapi.com/c850124/v850124774/1ddcf0/_A7I6vHPHeM.jpg

标签: reactjsunit-testingjestjsenzyme

解决方案


我相信它是因为 onClick 侦听器附加到 的子级<CustomButton/>,即<button/>. 您是否尝试过将 data-test 道具传递给<button/>组件?否则尝试类似findByTestAttr(wrapper, 'download_button').first().childAt(0).simulate('click').


推荐阅读