Я новичок в 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
});
});