【发布时间】:2017-10-16 14:33:56
【问题描述】:
我正在尝试测试模块 X 中的一个函数。这是一个相当复杂的函数。在这个函数中,我在模块 Y 中导入了一个调用第三方服务的函数。如果我对模块 X 的测试未导入模块 Y,我如何在模块 Y 中存根此第 3 方服务?
【问题讨论】:
标签: node.js unit-testing testing
我正在尝试测试模块 X 中的一个函数。这是一个相当复杂的函数。在这个函数中,我在模块 Y 中导入了一个调用第三方服务的函数。如果我对模块 X 的测试未导入模块 Y,我如何在模块 Y 中存根此第 3 方服务?
【问题讨论】:
标签: node.js unit-testing testing
你可以沿着require接缝修补像嘲弄这样的项目:
如果您尝试过在 Node.js 中使用模拟,那么您毫无疑问 发现让你的模拟连接起来并不容易 面对 Node 的模块加载系统。当您的待测源 通过 require 引入它的依赖项,你想要你的 mocks 提供,而不是原始模块,以启用真正的单元测试 你的代码。
【讨论】:
假设您的模块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 允许你模拟任何东西,而不需要任何非常适合单元测试的依赖项。希望对您有所帮助。
【讨论】: