Как имитировать функцию модуля с помощью proxyquire

Мне нужно смоделировать модуль узла «mkdirp-promise», который предоставляет функцию конструктора, как показано ниже.

mkdirpPromise(dirPath)
        .then(() => {
            console.log('ABCDEFGH');
            resolve(dirPath);
        })
        .catch((error) => {
            console.log('HeABCDEFGHre');
            const details = error.message;
            const err = customError.failed_create_downloads_directory()
                .withDetails(details);
            reject(err);
        });

Я могу издеваться над ним, используя proxiquire, как показано ниже: -

let mkdirpPromiseMock = sinon.stub().rejects();

 const sthreeDownloadMock =
    proxyquire('./../../modules/sThreeDownload', {
        joi: joiMock,
        fs: fsMock,
        '@monotype/core-error': {
            errors: {
                ApiError: customErrorMock,
            },
        },
        'aws-sdk': awsSDK,
        'mkdirp-promise': mkdirpPromiseMock,
        path: pathMock,
    });

Теперь я хочу переопределить mkdirpPromiseMock во втором тестовом примере с помощью

mkdirpPromiseMock = sinon.stub().resolves();

чего я не умею. Любая помощь приветствуется.


person iAviator    schedule 27.02.2018    source источник
comment
Это должно было работать нормально, но я не могу на самом деле предоставить какие-либо детали, с которыми мы могли бы вам помочь. Упрощенный случай, который можно запустить и который показывает проблему, может помочь   -  person oligofren    schedule 28.03.2018


Ответы (1)


Proxyquire несовместим с jest.

Вам нужно использовать имитирующую библиотеку, например rewiremock.

Пожалуйста, посмотрите на этот ответ, который входит в деталь.

пример REPL

person Menelaos Kotsollaris    schedule 20.09.2019