如何在nodejs中unit testing“私有”效用函数

我目前正在为nodejs应用程序编写一些testing。 假设我有一个像这样的模块:

module.exports = function myModule(moduleParam) { var someVar; .... .... function helper(param) { return param + someVar; } return { doSomething: function (bar) { .... .... var foo = helper(bar); .... .... } }; }; 

假设“帮助者”function只在模块中有用,不应该暴露在外面。

testing它的“最佳实践”是什么? (当然,我可以将doSomething函数作为一个整体进行testing,但是这样,“帮助”函数在特定情况下以“黑盒”方式进行testing)。

我使用nodeunit作为testing框架,但是我可以根据需要进行更改。

你不testing它。 unit testing是黑匣子testing。 这意味着你唯一要testing的是公共接口,也就是合同。

这些私有函数只能通过重构公共函数来实现。

所以,如果你使用TDD,你的私有函数将被隐式testing。

如果这感觉错了,那么通常是因为你的结构是错误的。 那么你应该考虑把你的私人东西移动到一个额外的模块。

因为我发现testing是一个超越unit testing和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; 

imported-file.js

 var requireFrom = require('require-from'); var helper = requireFrom('helperExports', './module-file')); var public = requireFrom('exports', './module-file')); // same as require('./module-file')