Tengo un caso de uso común en el que tengo un cliente API en código:
// services/getApiClient.js import axios from 'axios'; export default (user) => { return axios.get('https://api.com', headers: { Authorization: user.apiKey }); }Mi aplicación consume este cliente API en muchas rutas.
Quiero poder usar un simulacro manual definido en 1 archivo en todo mi conjunto de pruebas Jest:
// services/__mocks__/getApiClient.js export const get = jest.fn(); export const post = jest.fn(); export default (user) => { return { __esMock: true, default: { get, post } } }Entonces esperaba poder lograr esto en las pruebas:
// example.test.js import getApiClient from 'services/getApiClient' import { get } from 'services/__mocks__/getApiClient'; jest.mock('services/getApiClient'); get.mockReturnValue({ data: { example: 'data' }); Sin embargo, cuando example.test.js ejecuta el sujeto real example.js , el valor de retorno simulado de apiClient.get siempre está undefined .
Sé que puedo hacer que esta prueba funcione realizando un jest.mock con un reemplazo en línea, pero es mucho copiar y pegar lo que espero evitar.
// example.test.js import getApiClient from 'services/getApiClient'; jest.mock('services/getApiClient'); const apiClient = { get: jest.fn(), post: jest.fn() }; jest.mockImplementation(() => apiClient); apiClient.get.mockReturnValue({ data: { example: 'data' }});¡Se agradecería cualquier orientación sobre cómo hacer que estos simulacros estén más SECOS!