javascript - 测试模块的未导出 Node 方法

标签 javascript node.js unit-testing testing tdd

这是一个普通的 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/

相关文章:

Node.js buf.toString 与 String.fromCharCode

.net - .NET Compact Framework 是否有流行的单元测试框架?

javascript - 网络数据如何显示在网络浏览器中?

javascript - 我可以向不同主机的 iframe 授予显式 Javascript 方法吗?

javascript - 与 useState 的异步性质相比,React 的 useReducer 是同步的吗?

javascript - 遍历 node.js 中的 json 文件

javascript - Mongoose:带有通配符的 bool 值 'or' 查询

mysql - Express View 引擎无法识别发送到前端的数据

angular - ng2-translate:无法读取 TranslatePipe.transform 处未定义的属性 'subscribe'

ios - XCTAssertEqualObjects 我可以检查两个接受的值吗?