He creado un simulacro de trabajo para Axios:
// __mocks__/axios.js // Based on https://jestjs.io/docs/manual-mocks const axios = jest.createMockFromModule("axios"); const log = console.log.bind(console); axios.create = () => { log(`Running axios.create`); return { get: () => { log(`Running get`); return { status: 500, statusText: "Internal Server Error", body: { onFire: "Mock API response from mock axios module", }, }; }, }; }; module.exports = axios;Esto funciona bien en mis pruebas: el simulacro se carga automáticamente y la prueba 'arroja un error' funciona:
describe(`getLatestPrice`, () => { it(`throws an error when the response is bad`, async () => { expect(() => { log(`Should throw`); return getLatestPrice(assetCode); }).toThrow(); }); it(`gets a single price by stream code`, async () => { // Disabling the mock isn't working jest.unmock("axios"); const price = await getLatestPrice(assetCode); log(`price`, price); expect(price).toEqual({ ... }); }); }) Sin embargo, la segunda prueba, que llama a jest.unmock() , todavía usa la biblioteca simulada.
¿Cómo puedo deshabilitar la burla para una sola prueba?
Actualización: leyendo https://github.com/facebook/jest/issues/2649 También intenté usar requireActual() para anular el simulacro:
const actualAxios = jest.requireActual("axios"); const mockAxios = require("axios"); mockAxios.create = actualAxios.create; Pero las llamadas a axios.create() aún involucran el simulacro.
El estilo de burla que realizas es burla global. Todas las pruebas que utilizan las instancias "axios" en esencia están programadas para devolver una respuesta 500. Para lograr un comportamiento por prueba, deberá simular "axios" localmente en la prueba. Luego, puede arreglar su simulacro en cada prueba para que responda de la manera que espera.