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

212
Vistas
test rejecting an axios promise

I am trying to figure out how to correctly mock this code. I have figured out how to mock a success, but I cannot figure out how to mock the catch/reject block.

App code:

function getData(url = '') {
  return new Promise((resolve, reject) => {
    axios
      .get(`${baseURL}${url}`)
      .then((res) => {
        resolve(res.data);
      })
      .catch((err) => {
        reject(err);
      });
  });
}

in testing I have:

import axios from 'axios';
const MockAdapter = require('axios-moc-adapter');

describe('getData', () => {
  it('test success', async () => {
    const mock = new MockAdapter(axios);

    mock.onGet(`${service.baseURL}/sites`).reply(200, 'success');
    const axiosSpy = jest.spyOn(axios, 'get');

    const rtn = await service.getData('/sites');

    expect(axiosSpy).toHaveBeenCalled();
    expect(rtn).toBe('success');
  });
  it('test failure', async () => {
    const mock = new MockAdapter(axios);

    mock.onGet(`${service.baseURL}/sites`).networkError();
    const rtn = await service.getData('/sites').catch((err) => {
      expect(err.message).toBe('message');
    });
    expect(rtn).toBe(undefined);
  });
});

The test success test works, but when I test the failure, I get:

    Expected: "message"
    Received: "Cannot read properties of undefined (reading 'then')"

      29 |     mock.onGet(`${service.baseURL}/sites`).networkError();
      30 |     const rtn = await service.getData('/sites').catch((err) => {
    > 31 |       expect(err.message).toBe('message');
         |                           ^
      32 |     });
      33 |     expect(rtn).toBe(undefined);
      34 |   });

How can I write a test that successfully passes the failure case? Specifically, I can make this test pass by not checking inside the catch block, but when I run coverage, it doesn't cover the catch block in the App code. How can I correctly cover this line?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Can't reproduce your issue, but .networkError() will throw an error with 'Network Error' message rather than 'message', see source code index.js#L141

service.ts:

import axios from 'axios';

export const baseURL = 'http://localhost:3000/api';
export function getData(url = '') {
  return new Promise((resolve, reject) => {
    axios
      .get(`${baseURL}${url}`)
      .then((res) => {
        resolve(res.data);
      })
      .catch((err) => {
        reject(err);
      });
  });
}

service.test.ts:

import * as service from './service';
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';

describe('getData', () => {
  it('test success', async () => {
    const mock = new MockAdapter(axios);

    mock.onGet(`${service.baseURL}/sites`).reply(200, 'success');
    const axiosSpy = jest.spyOn(axios, 'get');

    const rtn = await service.getData('/sites');

    expect(axiosSpy).toHaveBeenCalled();
    expect(rtn).toBe('success');
  });
  it('test failure', async () => {
    const mock = new MockAdapter(axios);
    mock.onGet(`${service.baseURL}/sites`).networkError();
    const rtn = await service.getData('/sites').catch((err) => {
      expect(err.message).toBe('Network Error');
    });
    expect(rtn).toBe(undefined);
  });
  it('test failure 2', async () => {
    const mock = new MockAdapter(axios);

    mock.onGet(`${service.baseURL}/sites`).networkError();
    await expect(service.getData('/sites')).rejects.toThrowError('Network Error');
  });
});

test result:

 PASS  examples/69947398/service.test.ts (8.89 s)
  getData
    ✓ test success (5 ms)
    ✓ test failure (1 ms)
    ✓ test failure 2 (2 ms)

------------|---------|----------|---------|---------|-------------------
File        | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
------------|---------|----------|---------|---------|-------------------
All files   |     100 |        0 |     100 |     100 |                   
 service.ts |     100 |        0 |     100 |     100 | 4                 
------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        9.52 s
about 4 years ago · Juan Pablo Isaza 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