我试图弄清楚如何在nodejs(最好是用mocha或jasmine)中测试内部(即不导出)功能。而且我不知道!
假设我有一个像这样的模块:
function exported(i) {
return notExported(i) + 1;
}
function notExported(i) {
return i*2;
}
exports.exported = exported;
和以下测试(摩卡):
var assert = require('assert'),
test = require('../modules/core/test');
describe('test', function(){
describe('#exported(i)', function(){
it('should return (i*2)+1 for any given i', function(){
assert.equal(3, test.exported(1));
assert.equal(5, test.exported(2));
});
});
});
有什么办法可以对notExported
功能进行单元测试而不实际导出功能,因为它不是要公开的?
诀窍是将
NODE_ENV
环境变量设置为类似变量test
,然后有条件地将其导出。假设尚未全局安装Mocha,则可以在应用目录的根目录中包含一个Makefile,其中包含以下内容:
该make文件在运行mocha之前会设置NODE_ENV。然后,您可以
make test
在命令行中运行Mocha测试。现在,您可以有条件地导出通常仅在运行mocha测试时才导出的函数:
另一个答案建议使用vm模块评估文件,但这不起作用,并抛出错误,指出未定义导出。