如何在 React 中的 onClick 之后测试 next/link (Nextjs) 获取页面重定向?

iam*_*ynq 5 testing unit-testing reactjs enzyme next.js

我想测试页面在点击 div 后被重定向,但我不知道如何,这是我的代码。非常感谢

<div className="bellTest">
   <NextLink href="/notifications">
       <Bell />
   </NextLink>
 </div>
Run Code Online (Sandbox Code Playgroud)

测试.tsx

jest.mock('next/link', () => {
     return ({ children }) => {
            return children;
     };
});

describe('Test of <HeaderContainer>', () => {
    test('Test the page redirect after click', async done => {
        const wrapper = mount( <HeaderComponent /> );
        await wrapper
            .find('.bellTest')
            .at(0)
            .simulate('click');
        // expect the page getting redirect
    });
});
Run Code Online (Sandbox Code Playgroud)

fel*_*osh 3

next/link您可以在路由器事件上注册一个间谍,并检查它是否被调用,而不是嘲笑。

测试将如下所示:

import Router from 'next/router';

describe('Test of <HeaderContainer>', () => {
  const spies: any = {};

  beforeEach(() => {
    spies.routerChangeStart = jest.fn();
    Router.events.on('routeChangeStart', spies.routerChangeStart);
  });

  afterEach(() => {
    Router.events.off('routeChangeStart', spies.routerChangeStart);
  });

  test('Test the page redirect after click', async done => {
    const wrapper = mount(<HeaderComponent />);
    await wrapper
      .find('.bellTest')
      .at(0)
      .simulate('click');

    expect(spies.routerChangeStart).toHaveBeenCalledWith('expect-url-here');
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但是“spies.routerChangeStart = jest.fn();”显示此错误“类型“{}”上不存在属性“routerChangeStart””您能显示更多详细信息吗? (2认同)