testing未导出模块的节点方法
这是一个正常的节点模块。 有些function不是全部导出,但需要testing
var foo1 = function () { console.log("Foo1"); } var foo2 = function () { console.log("Foo2"); } var foo3 = function () { console.log("Foo3"); } module.exports = { foo1: foo1, foo2: foo2 }
任何人都知道如何testingfoo3? 通常我用节点沙箱模块testing模块。 但是只能模拟给模块的东西,但是我不能改变方法的范围。
带有节点沙箱模块的testing模块示例:
var SandboxedModule = require('sandboxed-module'); var user = SandboxedModule.require('./user', { requires: {'mysql': {fake: 'mysql module'}}, globals: {myGlobal: 'variable'}, locals: {myLocal: 'other variable'}, });
感谢帮助!
您无法更改语言的范围规则。 但是你可以解决这个问题。 你可以导出一个环境variables,如果variables存在,你也可以导出foo3
。 喜欢这个
module.exports = { foo1: foo1, foo2: foo2 } if (process.env.TESTING) { module.exports.foo3 = foo3; }
因此,testing用例可以testingfoo3
,就像他们testing其他导出函数一样。 但是,在生产环境中,由于TESTING
环境variables不存在, foo3
不会被导出。
另外,在函数名中使用_
可以理解为,函数/variables是内部使用的,不需要依赖该函数/variables的外部代码,并且在没有任何通知的情况下进行更改。
我用这个,似乎工作。
sample.js
function double(p2) { return p2*2 } module.exports = function(p, p2) { return "Hi "+p+", double "+p2+" = "+double(p2) }
sample_test.js
function load(file_name) { global.module = {} const contents = require('fs').readFileSync(file_name, 'utf8'); const vm = require('vm') new vm.Script(contents).runInThisContext(); } load("./sample.js") console.log(global.module.exports("Jim","10")) console.log(double(2))
产量
Hi Jim, double 10 = 20 4