17

我目前正在为 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 作为测试框架,但我可以根据需要更改它。

4

2 回答 2

24

你不测试它。单元测试是黑盒测试。这意味着您唯一测试的是公共接口,即合约。

诸如此类的私有功能只能通过重构公共功能来实现。

因此,如果您因此使用 TDD,您的私有函数将被隐式测试。

如果这感觉不对,那通常是因为您的结构错误。然后你应该考虑将你的私有内容移到一个额外的模块中。

于 2013-03-10T17:50:33.700 回答
8

因为我发现测试是单元测试和 TDD 之外的有用工具(这个 SO 答案是一个很好的论据),所以我制作了一个 npm 包来帮助你解决类似的情况:require-from

在您的示例中,这就是您将如何使用它:

模块文件.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')
于 2014-05-13T14:26:45.237 回答