Reactjs 使用useEffect中的酶/笑话测试事件侦听器

Reactjs 使用useEffect中的酶/笑话测试事件侦听器,reactjs,testing,event-handling,react-hooks,enzyme,Reactjs,Testing,Event Handling,React Hooks,Enzyme,我的一个组件中有一段代码,如下所示,如果用户使用ESCAPE键,模态将关闭: React.useEffect(() => { function keyListener(e) { if (e.key === 'Escape' || e.keyCode === escapeKey || e.which === escapeKey) { props.toggleShowModal(); } } docume

我的一个组件中有一段代码,如下所示,如果用户使用ESCAPE键,模态将关闭:

    React.useEffect(() => {
    function keyListener(e) {
        if (e.key === 'Escape' || e.keyCode === escapeKey || e.which === escapeKey) {
            props.toggleShowModal();
        }
    }

    document.addEventListener('keydown', keyListener);

    return () => document.removeEventListener('keydown', keyListener);
});
我尝试了几种方法来测试,但都没有效果,我最后尝试的是:

    test('it calls the dismiss callback on ESC key', () => {
    global.document.addEventListener = jest.fn();

    const wrapper = mount(
        <Modal
            toggleShowModal={jest.fn()}
        />
    );
    expect(global.document.addEventListener).toHaveBeenCalled();

    const KEYBOARD_ESCAPE_CODE = 27;

    const spyOnToggleShowModal = jest.spyOn(wrapper.props(), 'toggleShowModal');
    var event = new KeyboardEvent('keydown', { key: 'Escape', keyCode: KEYBOARD_ESCAPE_CODE, which: KEYBOARD_ESCAPE_CODE });
    document.dispatchEvent(event);
    expect(spyOnToggleShowModal).toHaveBeenCalled();
});
test('它调用ESC键上的disclose回调',()=>{
global.document.addEventListener=jest.fn();
常量包装器=装入(
);
expect(global.document.addEventListener).toHaveBeenCalled();
常量键盘\转义\代码=27;
const spyontogleshowmodel=jest.spyOn(wrapper.props(),'toggleshowmodel');
var event=newkeyboardevent('keydown',{key:'Escape',keyCode:KEYBOARD\u Escape\u CODE,which:KEYBOARD\u Escape\u CODE});
文件、调度事件(事件);
expect(spyontoggleshowmodel).tohavebeincalled();
});