如何在单位的NodeJS测试“私人”效用函数(How to unit test 'priva

2019-08-17 11:16发布

我目前正在写一个应用程序的NodeJS一些测试。 假设我有一个这样的模块:

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

假设“帮手”的功能只在模块内是有用的,不应该被暴露于外。

什么是检验它的“最佳实践”? (当然,我可以测试DoSomething的功能为一体,但这样一来,在“助手”功能,在特定情况下进行测试,在一个“黑盒子”的方式)。

我使用nodeunit作为测试框架,对于梅特,但我可以改变它的需要。

Answer 1:

你不对它进行测试。 单元测试是黑盒测试。 这意味着,你测试的唯一的事情就是又名合同的公共接口。

私人的功能,例如,这些只能从重构公立发生。

所以,如果你因此使用TDD您的私有函数隐测试。

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



Answer 2:

因为我觉得测试超出单元测试和TDD的有用工具( 此SO答案也是一个不错的说法),我做了一个NPM包在你们这样的情况下,以帮助: 需要-从 。

在您例如,这是你将如何使用它:

模块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')


文章来源: How to unit test 'private' utility function in nodejs