Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

220
Visualizações
prueba rechazando una promesa axios

Estoy tratando de descubrir cómo simular correctamente este código. Descubrí cómo simular un éxito, pero no puedo descifrar cómo simular el bloque de captura/rechazo.

Código de la aplicación:

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

en las pruebas tengo:

 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); }); });

La prueba de éxito de la prueba funciona, pero cuando pruebo la falla, obtengo:

 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 | });

¿Cómo puedo escribir una prueba que pase con éxito el caso de falla? Específicamente, puedo hacer que esta prueba pase sin verificar dentro del bloque catch, pero cuando ejecuto la cobertura, no cubre el bloque catch en el código de la aplicación. ¿Cómo puedo cubrir correctamente esta línea?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

No se puede reproducir su problema, pero .networkError() generará un mensaje de error con el mensaje 'Network Error' en lugar de 'message' , consulte el código fuente 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'); }); });

resultado de la prueba:

 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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda