Art*_*Ale 17 javascript unit-testing commonjs node.js
我正在为nodejs应用程序编写一些测试.假设我有一个这样的模块:
module.exports = function myModule(moduleParam) {
var someVar;
....
....
function helper(param) {
return param + someVar;
}
return {
doSomething: function (bar) {
....
....
var foo = helper(bar);
....
....
}
};
};
Run Code Online (Sandbox Code Playgroud)
假设'helper'函数仅在模块中有用,不应暴露给外部.
测试它的"最佳实践"是什么?(当然,我可以测试doSomething函数作为一个整体,但是这样,'helper'函数在特定情况下以'黑盒'的方式进行测试).
我正在使用nodeunit作为测试框架,但是我可以根据需要进行更改.
Gol*_*den 22
你没有测试它.单元测试是黑盒测试.这意味着您测试的唯一内容是公共接口即契约.
这些私人功能只能通过重构公共功能来实现.
因此,如果您因此使用TDD,则会隐式测试您的私有函数.
如果这感觉不对,最常见的原因是你的结构错了.然后你应该考虑将你的私人东西转移到一个额外的模块.
小智 8
因为我发现测试是一个超越单元测试和TDD的有用工具(这个SO答案是一个很好的论据),我制作了一个npm包来帮助像你这样的情况:require-from.
在您的示例中,这是您将如何使用它:
module-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;
Run Code Online (Sandbox Code Playgroud)
imports-file.js:
var requireFrom = require('require-from');
var helper = requireFrom('helperExports', './module-file'));
var public = requireFrom('exports', './module-file')); // same as require('./module-file')
Run Code Online (Sandbox Code Playgroud)