测试未导出模块的节点方法

时间:2014-04-06 08:29:34

标签: javascript node.js unit-testing testing tdd

这是一个普通的节点模块。有些功能并非全部导出,但需要测试

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'},
});

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我用过这个,似乎有效。

<强> 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