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

435
Views
Burlarse de react-router-dom para useHistory hook provoca el siguiente error: TS2698: los tipos de propagación solo se pueden crear a partir de tipos de objetos

Estoy tratando de burlarme react-router-dom en uno de mis casos de prueba para que el useHistory funcione en mis pruebas. Decido usar jest.mock para simular todo el módulo y jest.requireActual para preservar las otras propiedades que no quiero simular.

 jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), useHistory: () => ({ location: { pathname: '/list', }, }), }));

En realidad, esto se deriva de una de las soluciones altamente calificadas para la siguiente pregunta: ¿Cómo simular el gancho useHistory en broma?

Sin embargo, el compilador de TypeScript marca el siguiente error en la siguiente línea ...jest.requireActual('react-router-dom'),

TS2698: los tipos de propagación solo se pueden crear a partir de tipos de objetos.

Curiosamente, solo enfrento este problema después de actualizar jest y ts-jest a las últimas versiones (jest v26). No enfrento ninguno de estos problemas cuando estaba usando jest 24.xx

 "@types/jest": "^26.0.4", "jest": "^26.1.0", "ts-jest": "^26.1.1",

¿Alguien sabe cómo resolver este problema para las últimas versiones de broma?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

jest.requireActual devuelve un tipo unknown que no se puede propagar.

Un tipo correcto es:

 import * as ReactRouterDom from 'react-router-dom'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom') as typeof ReactRouterDom, useHistory: ..., }));

Una solución rápida es any :

 jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom') as any, useHistory: ..., }));

Es aceptable porque no afecta la seguridad del tipo en este caso.

Dado que react-router-dom es un módulo ES, una forma más correcta de simularlo es:

 jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom') as any, __esModule: true, useHistory: ..., }));
over 4 years ago · Santiago Trujillo 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!