Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1K
Views
Cómo anular la simulación predeterminada de useParams en broma

Tengo que probar un componente que se renderiza según el país y el idioma en los parámetros de ruta de URL. Así que quiero saber si los componentes se procesan correctamente en función del cambio en los parámetros.

Me burlo de useParams y establezco un valor requerido que funciona para la mayoría de las pruebas. Ahora, para un caso específico, necesito cambiar el parámetro.

 jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), useParams: () => ({ language: 'IT' }) }));

¿Cómo anulo el idioma en la prueba?

Gracias

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

En lugar de burlarse de useParams , puede usar <MemoryRouter initialEntries> , por ejemplo:

MyComponent.js

 import { useParams } from "react-router-dom"; function MyComponent() { const { language } = useParams(); return ( <div> <h2>My Component page</h2> <p>language: {language}</p> </div> ); }

MyComponent.test.js

 import { MemoryRouter } from "react-router-dom"; import { render, screen, fireEvent } from "@testing-library/react"; import "@testing-library/jest-dom"; import App from "./App"; test("Home: Go to `MyComponent: en`", async () => { render( <MemoryRouter initialEntries={["/"]}> <App /> </MemoryRouter> ); expect(screen.getByText("Home page")).toBeInTheDocument(); fireEvent.click(screen.getByText("My Component: en")); expect(screen.getByText("language: en")).toBeInTheDocument(); expect(screen.queryByText("language: fr")).not.toBeInTheDocument(); }); test("MyComponent: en", async () => { render( <MemoryRouter initialEntries={["/myComponent/en"]}> <App /> </MemoryRouter> ); expect(screen.getByText("language: en")).toBeInTheDocument(); }); test("MyComponent: fr", async () => { render( <MemoryRouter initialEntries={["/myComponent/fr"]}> <App /> </MemoryRouter> ); expect(screen.getByText("language: fr")).toBeInTheDocument(); });

demostración en línea

Editar elocuente-tu-imqcbh

about 4 years ago · Juan Pablo Isaza Report

0

Basado en esta página en los documentos de Jest, intente lo siguiente

 // create a separate mock function that you can access from tests // NOTE: the name must start with `mock` and is case sensitive const mockUseParams = jest.fn().mockReturnValue({ language: 'IT', }); // mock the module using the mock function created above jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), useParams: mockUseParams, })); it('should behave differently when the params change', () => { mockUseParams.mockReturnValueOnce({ language: 'EN', }); // test implementation });
about 4 years ago · Juan Pablo Isaza Report

0

sí Incluya el enrutador en el componente de su aplicación; Siempre represente el componente de la aplicación en sus pruebas (nunca componentes secundarios como Ubicaciones); Navegue a sus páginas en las pruebas buscando y haciendo clic en los enlaces de la página Los aspectos positivos de este enfoque: no necesita leer el resto de esta publicación 🙃 (y la configuración de su prueba será menos complicada). Los aspectos negativos: no puede cargar inmediatamente un historial de enrutamiento (la página actual y las páginas anteriores) en la configuración de prueba; necesita pasar por todas las interacciones del usuario para construir el historial.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!