Шутка издевается над модулем - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь смоделировать импорт модуля с помощью Jest, и я почему-то борюсь. У меня есть следующий код:

src /astic.js

const getRolesFunc = elasticClient => async username => {
   // Do some stuff
}

module.exports = { getRolesFunc };

src / handlerFactory.js

const { getRolesFunc } = require("../src/elastic");

const handlerFactory = elasticClient => 
    async (event) =>  {
        const getRolesAsync = getRolesFunc(elasticClient);
        const roles = await getRolesAsync();
    }
}

Мой тестовый файл в настоящее время выглядит следующим образом:

tests / handlerFactory.unit.test.js

const { handlerFactory } = require("../src/handlerFactory");
const { getRolesFunc } = require("../src/elastic");

jest.mock("../src/elastic", () => ({
    getRolesFunc: jest.fn(),
}));

describe("handlerFactory", () => {

    it("handler returns correct response", async () => {
        getRolesFunc.mockImplementation(() => "foo");

        // Call the handler to get our actual result
        const handlerAsync = handlerFactory({});
        const result = await handlerAsync(event);
    });
});

На данный момент, однако, я получаюошибка в моем тесте:

TypeError: getRolesFunc.mockImplementation не является функцией

Я пробовал несколько вещей, ни одна из которых не работала, это похоже на ближайший, ноЯ не могу понять, почему jest.mock не работает правильно. Я посмотрел на несколько примеров и до сих пор не могу понять, почему это я не могу заставить насмехаться. Может кто-нибудь помочь указать, что я сделал не так?

1 Ответ

1 голос
/ 04 октября 2019

Поскольку у вас есть module.exports = { getRolesFunc };, вам нужно изменить код ниже:

const { handlerFactory } = require("../src/handlerFactory");
const elasticObj = require("../src/elastic");

jest.mock("..src/elastic");
// in your example, now put below code:

elasticObj.getRolesFunc.mockImplementation(() => "foo");
...