Как смоделировать функцию ax ios .create ([config]), чтобы вернуть методы ее экземпляра вместо того, чтобы переопределять их с помощью mock? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь смоделировать ax ios .create () , потому что я использую его экземпляр во всем приложении и, очевидно, нуждаюсь во всей его реализации, которая уничтожается макетом, поэтому не может получить результат метода get, post должным образом.

Вот как выглядит код в реальном файле:

 export const axiosInstance = axios.create({
        headers: {
           ...headers
        },
        transformRequest: [
            function (data, headers) {
                return data;
            },
        ],
    });
    const response = await axiosInstance.get(endpoint);

А вот макет установки для ax ios внутри тестовый файл

   jest.mock('axios', () => {
        return {
            create: jest.fn(),
            get: jest.fn(() => Promise.resolve()),
        };
    }
);

Как я могу получить все методы экземпляра в переменной axiosInstance вместо простой фиктивной функции, которая ничего не делает?

Документация для ax ios .create and методы экземпляра: https://github.com/axios/axios#instance -методы

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы можете использовать jest's genMockFromModule . Он сгенерирует jest.fn() для каждого из методов модулей, и вы сможете использовать .mockReturnThis() на create для возврата того же экземпляра.

пример:

./src/__mocks__/axios.js
const axios = jest.genMockFromModule('axios');

axios.create.mockReturnThis();

export default axios;
рабочий пример
0 голосов
/ 27 февраля 2020

Заканчивалось прилипание к макету топора ios и просто указание на этот макет путем назначения указателя axiosInstance созданному макету топора ios. В основном, как @ jonrsharpe предложил

Вкратце:

import * as m from 'route';
jest.mock('axios', () => {
        return {
            create: jest.fn(),
            get: jest.fn(() => Promise.resolve()),
        };
    }
);
m.axInstance = axios

Было бы очень приятно, если бы я мог обойтись без него.

...