Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

2.2K
Vistas
¿Cómo hacer correctamente un error de lanzamiento simulado en Jest?

Estoy probando mi API GraphQL usando Jest.

Estoy usando un traje de prueba separado para cada consulta/mutación

Tengo 2 pruebas (cada una en un traje de prueba separado) donde me burlo de una función (a saber, callMethod de Meteor) que se usa en mutaciones.

 it('should throw error if email not found', async () => { callMethod .mockReturnValue(new Error('User not found [403]')) .mockName('callMethod'); const query = FORGOT_PASSWORD_MUTATION; const params = { email: 'user@example.com' }; const result = await simulateQuery({ query, params }); console.log(result); // test logic expect(callMethod).toBeCalledWith({}, 'forgotPassword', { email: 'user@example.com', }); // test resolvers });

Cuando console.log(result) obtengo

 { data: { forgotPassword: true } }

Este comportamiento no es lo que quiero porque en .mockReturnValue lanzo un error y, por lo tanto, espero que el result tenga un objeto de error

Antes de esta prueba, sin embargo, se ejecuta otra

 it('should throw an error if wrong credentials were provided', async () => { callMethod .mockReturnValue(new Error('cannot login')) .mockName('callMethod');

Y funciona bien, se lanza el error.

Supongo que el problema es que el simulacro no se reinicia después de que finaliza la prueba. En mi jest.conf.js tengo clearMocks: true

Cada traje de prueba está en un archivo separado, y me burlo de las funciones antes de las pruebas como esta:

 import simulateQuery from '../../../helpers/simulate-query'; import callMethod from '../../../../imports/api/users/functions/auth/helpers/call-accounts-method'; import LOGIN_WITH_PASSWORD_MUTATION from './mutations/login-with-password'; jest.mock( '../../../../imports/api/users/functions/auth/helpers/call-accounts-method' ); describe('loginWithPassword mutation', function() { ...

ACTUALIZAR

Cuando sustituí .mockReturnValue con .mockImplementation todo salió como se esperaba:

 callMethod.mockImplementation(() => { throw new Error('User not found'); });

Pero eso no explica por qué en otra prueba .mockReturnValue funciona bien...

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Cambie .mockReturnValue con .mockImplementation :

 yourMockInstance.mockImplementation(() => { throw new Error(); });

por si quieres afirmar

 test('the fetch fails with an error', () => { return expect(fetchData()).rejects.toMatch('error'); });

Si es una promesa, también puede .rechazar www.jestjs.io/docs/en/asynchronous#resolves--rejects

over 4 years ago · Santiago Trujillo Denunciar

0

Para promesas, puede usar https://jestjs.io/docs/mock-function-api#mockfnmockrejectedvaluevalue

 test('async test', async () => { const asyncMock = jest.fn().mockRejectedValue(new Error('Async error')); await asyncMock(); // throws "Async error" });

Para probar si se produjo un error o no, puede usarhttps://eloquentcode.com/expect-a-function-to-throw-an-exception-in-jest

 const func = () => { throw new Error('my error') } it('should throw an error', () => { expect(func).toThrow() })
over 4 years ago · Santiago Trujillo Denunciar

0

Para Angular + broma:

 import { throwError } from 'rxjs'; yourMockInstance.mockImplementation(() => { return throwError(new Error('my error message')); });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda