繁体   English   中英

如何在测试中另一个模块调用的模块中存根/模拟一个函数?

[英]How can I stub/mock a function in a module called by another module in a test?

我正在尝试测试模块X中的一个函数。这是一个相当复杂的函数。 在此函数中,我将在模块Y中导入一个调用第三方服务的函数。 如果我对模块X的测试未导入模块Y,如何在模块Y中存根此第三方服务?

您可以使用诸如嘲笑之类的项目来修补require接缝:

如果您曾尝试在Node.js中使用模拟,那么您无疑会发现,面对Node的模块加载系统将模拟连接起来并非易事。 当被测源通过require引入其依赖项时,您希望提供的模拟而不是原始模块能够对代码进行真正的单元测试。

https://github.com/mfncooper/mockery

假设您的模块X返回Y执行操作的结果,我们可以说X如下:

const y = require ('y.js');

xWork () {
    return y.doWork().result;
}

在这里,您可以更新X以像这样注入Y

xWork (y) {
    return y.doWork().result;
}

从那里,您可以在测试中生成Y的模拟物,可以像这样注入:

yMock = {
    doWork: () => { 
        return { result: 'mockedResult' };
    }
};

x.xWork(yMock); // call x with y mock

Javascript允许您模拟任何东西而无需任何依赖,这对于单元测试是完美的。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM