首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何测试来自NextJS useRouter的路由器推送?

如何测试来自NextJS useRouter的路由器推送?
EN

Stack Overflow用户
提问于 2022-01-12 20:21:12
回答 1查看 2.7K关注 0票数 1

我有一个触发router.push(‘/search’)的组件;

例:

代码语言:javascript
运行
复制
const BottomNavigation = () => { 
const router = useRouter();
    return (
     <div>
         <button test-id="searchIcon" onClick={()=>{router.push('/search')}}>Go</button>
     </div>
  )
  }

如何测试这个组件和router.push?

我试过这个,但不管用:

代码语言:javascript
运行
复制
jest.mock('next/router', () => ({
    __esModule: true,
    useRouter: jest.fn()
  }))

  nextRouter.useRouter = jest.fn();
nextRouter.useRouter.mockImplementation(() => ({ route: '/search' }));

describe("The Bottom Navigation redirect to the page:", () => {
    it('Search', () => {
        const router = createMockRouter()
        render(
            <RouterContext.Provider value={router}>
                 <BottomNavigation />
            </RouterContext.Provider>
        );
        const searchButton = screen.getByTestId('searchIcon');
            fireEvent.click(searchButton);
            expect(router.push).toHaveBeenCalledWith('/search')
    })
})

错误:

预期:"/search“

电话数:0

我的createMockRouter是:

代码语言:javascript
运行
复制
 export function createMockRouter(router?: Partial<NextRouter>): NextRouter {
        return {
          basePath: '',
          pathname: '/',
          route: '/',
          query: {},
          asPath: '/',
          back: jest.fn(),
          beforePopState: jest.fn(),
          prefetch: jest.fn(),
          push: jest.fn(),
          reload: jest.fn(),
          replace: jest.fn(),
          events: {
            on: jest.fn(),
            off: jest.fn(),
            emit: jest.fn(),
          },
          isFallback: false,
          isLocaleDomain: false,
          isReady: true,
          defaultLocale: 'en',
          domainLocales: [],
          isPreview: false,
          ...router,
        };
      }

路由器背景:

从‘next/dist/shared/lib/路由器-上下文’导入{RouterContext}

EN

Stack Overflow用户

发布于 2022-01-14 03:55:37

我不认为您需要深深地嘲弄路由器,在我的例子中,它的工作方式如下所示:

代码语言:javascript
运行
复制
import Router from 'next/router'

jest.mock('next/router')

describe('The Bottom Navigation redirect to the page:', () => {
 let routerSpy

 beforeEach(() => {
   routerSpy = jest.spyOn(Router, 'push')
 }) 

 it('Search', () => {
   ...
   expect(routerSpy).toBeCalledWith('/search')
 })
}

您可以使用spyOn法

票数 -1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70687903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档