Как вы устанавливаете jest.mock и mock.mockImplementation? - PullRequest
0 голосов
/ 01 октября 2019

Я новичок в Jest и пытаюсь смоделировать некоторые функции в тестируемом классе. У меня есть класс с именем apiProvider, который я тестирую для этих ложных вызовов API с использованием библиотеки nock. Я хочу высмеять ответы, которые я получаю от основных функций в функции родного брата. Когда я пытаюсь это сделать, я получаю сообщение об ошибке: TypeError: apiProvider.mockImplementation is not a function

Вот код:

// apiProvider.js
const axios = require("axios");

class apiProvider {
    constructor(config) {
        this.config = config;
    }

    async getThings() {
        const res = await axios.get('http://thingsapi.com').then(res => res.data);
    }
    async getDetail(id) {
        const res = await axios.get(`http://thingsapi.com`/${id}).then(res => res.data);
    }
    async getAllTheThingsAndDoStuff() { 
        const things = this.getThings();
        const details = things.map(thing => this.getDetail(thing.id));
        const allTheStuff = [].concat.apply([], await Promise.all(details));
        // Some boolean logic on things and detail...
        return allTheStuff;
    }
}

module.exports = apiProvider;
// apiProvider.test.js

const { apiProvider } = require("./apiProvier");
const nock = require("nock");
const config = require("./config");
const api = new apiProvider(config);

const thingsMock = require("./__mocks__/apiResponse/things");
const detailsMock = require("./__mocks__/apiResponse/details");
const allTheThings = require("./__mocks__/apiResponse/allTheThings");

describe("API Provider Tests", () => {
    it("Should get the things", async () => {
        nock("http://thingsapi.com").get().reply(200, thingsMock);
        const res = await api.getThings();
        expect(res).toEqual("something");
        // This test passes
    });

    it("Should get all the things and do stuff", async () => {
        jest.mock("./apiProvider", () => jest.fn());
        apiProvider.mockImplmentation(() => ({
          getAllTheThingsAndDoStuff: jest.fn(() => Promise.resolve(allTheThings)
        })));
        const res = await apiProvider.getAllTheThingsAndDoStuff();
        // This test is where I see the error
    });
});
...