NextJS Router & Jest:如何模拟路由器更改事件

Rah*_*pta 7 unit-testing mocking reactjs jestjs next.js

我正在使用next-routes,在我的 React 组件中,我使用下面的useEffect代码块来检测Router更改事件:

useEffect(() => {
  // THIS BLOCK WILL BE EXECUTED WHEN THE COMPONENT IS ALREADY MOUNTED AND SCREEN WOULD BE REDNDERED IN WHEN ROUTED CLIENT SIDE
  const handleRouterChangeComplete = url => {
    // console.log('INNNN handleRouterChangeComplete url = ', url);
    // MY REST OF THE LOGIC HERE
  };

  // THIS BLOCK WILL BE EXECUTED WHEN THE SCREEN WOULD BE REDNDERED IN WHEN ROUTED CLIENT SIDE
  Router.events.on('routeChangeComplete', handleRouterChangeComplete);
  return () => {
    Router.events.off('routeChangeComplete', handleRouterChangeComplete);
  };
}, []);
Run Code Online (Sandbox Code Playgroud)

我正在jest为此组件编写单元测试用例并面临以下错误:

TypeError: Cannot read property 'on' of undefined

      183 |
      184 |     // THIS BLOCK WILL BE EXECUTED WHEN THE SCREEN WOULD BE REDNDERED IN WHEN ROUTED CLIENT SIDE
    > 185 |     Router.events.on('routeChangeComplete', handleRouterChangeComplete);
Run Code Online (Sandbox Code Playgroud)

有人可以帮我嘲笑这个Router Change事件吗?谢谢

fel*_*osh 1

Router.events.emit('event-name')您可以使用;来触发相关的更改事件。

该代码取自路由器实现