我正在为nodejs应用程序编写一些测试。 假设我有一个这样的模块:
module.exports = function myModule(moduleParam) {
var someVar;
....
....
function helper(param) {
return param + someVar;
}
return {
doSomething: function (bar) {
....
....
var foo = helper(bar);
....
....
}
};
};
假设'helper'函数仅在模块中有用,不应暴露给外部。
测试它的“最佳实践”是什么? (当然,我可以测试doSomething函数作为一个整体,但这样,'helper'函数在特定情况下以'黑盒'的方式进行测试。)
我正在使用nodeunit作为测试框架,但我可以根据需要进行更改。
答案 0 :(得分:22)
你没有测试它。单元测试是黑盒测试。这意味着您测试的唯一内容是公共接口即契约。
这些私人功能只能通过重构公共功能来实现。
因此,如果您因此使用TDD,则会隐式测试您的私有函数。
如果这感觉不对,最常见的原因是你的结构错了。然后你应该考虑将你的私人资料转移到一个额外的模块。
答案 1 :(得分:8)
因为我发现测试是单元测试之外的有用工具而且TDD(this SO answer是一个很好的论据),我制作了一个npm包来帮助像你这样的情况:require-from。
在您的示例中,您将使用它:
模块file.js :
function helper(param) {
return param + someVar;
}
module.exports = function myModule(moduleParam) {
var someVar;
....
....
return {
doSomething: function (bar) {
....
....
var foo = helper(bar);
....
....
}
};
};
module.helperExports = helper;
导入-file.js :
var requireFrom = require('require-from');
var helper = requireFrom('helperExports', './module-file'));
var public = requireFrom('exports', './module-file')); // same as require('./module-file')