这是一个普通的 Node 模块。有一些功能没有全部导出,但需要测试
var foo1 = function () { console.log("Foo1"); }
var foo2 = function () { console.log("Foo2"); }
var foo3 = function () { console.log("Foo3"); }
module.exports = {
foo1: foo1,
foo2: foo2
}
有人知道如何测试 foo3 吗?通常我使用 node-sandboxed-module 测试模块。但是只能模拟模块给定的东西,但我不能改变方法的范围。
使用 node-sandboxed-module 测试模块的示例:
var SandboxedModule = require('sandboxed-module');
var user = SandboxedModule.require('./user', {
requires: {'mysql': {fake: 'mysql module'}},
globals: {myGlobal: 'variable'},
locals: {myLocal: 'other variable'},
});
感谢您的帮助!
最佳答案
您不能更改语言的范围规则。但是你可以解决这个问题。您可以导出一个环境变量,如果该变量存在,您也可以导出 foo3
。像这样
module.exports = {
foo1: foo1,
foo2: foo2
}
if (process.env.TESTING) {
module.exports.foo3 = foo3;
}
因此,测试用例可以测试 foo3
,就像它们测试其他导出函数一样。但是,在生产环境中,由于 TESTING
环境变量不会存在,因此 foo3
不会被导出。
此外,在函数名称中使用 _
被理解为,该函数/变量供内部使用,外部代码不应依赖该函数/变量,并且它可以在没有任何更改的情况下进行更改通知。
关于javascript - 测试模块的未导出 Node 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22891661/