【问题标题】:How to mock module function using proxyquire如何使用 proxyquire 模拟模块功能
【发布时间】:2018-08-07 10:01:03
【问题描述】:

我需要模拟 '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();

我无法做到。任何帮助表示赞赏。

【问题讨论】:

  • 这应该可以正常工作,但“我无法做到”并没有真正提供我们可以帮助您的任何细节。一个可运行并显示问题的简化案例会有所帮助

标签: node.js sinon stub sinon-chai proxyquire


【解决方案1】:

Proxyquirejest 不兼容。

您需要使用像 rewiremock 这样的模拟库。

请提供look at this answer 详细说明。

REPL example

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2016-04-21
    • 2018-01-18
    • 2019-08-28
    • 2018-12-15
    • 1970-01-01
    • 2019-07-16
    • 2018-07-29
    • 2020-10-24
    相关资源
    最近更新 更多