我正在开发一个现有节点项目,其中大多数js文件的代码结构如下所示。
var mod1 = require("mod1");
var mod2 = require("mod2");
var modn = require("moden");
function func1(data, callback) {
// Do some validation with data etc..
// Use one or more imported modules here
}
function func2(data, callback) {
// Do some validation with data etc..
// Use one or more imported modules here
}
exports.func1 = func1
exports.func2 = func2
单元如何测试func1,而不依赖于导入的模块?我怎么能模拟/存根呢? 我来自Java世界所以我熟悉模拟概念,但在这里我不知道如何使用require模拟全局声明的模块导入。
目前我们使用nodeunit进行单元测试,但它只测试了很小一部分代码。
我正在阅读关于simon.js和testdouble但不确定如何使用它们来模拟全局变量。
感谢任何帮助/指示。
答案 0 :(得分:0)
为了在测试期间覆盖依赖项,我建议在您的情况下使用https://github.com/thlorenz/proxyquire模块
为了快速说明,我从项目github
粘贴示例 foo.js:
var path = require('path');
module.exports.extnameAllCaps = function (file) {
return path.extname(file).toUpperCase();
};
module.exports.basenameAllCaps = function (file) {
return path.basename(file).toUpperCase();
}
foo.test.js:
var proxyquire = require('proxyquire')
, assert = require('assert')
, pathStub = { };
// when no overrides are specified, path.extname behaves normally
var foo = proxyquire('./foo', { 'path': pathStub });
assert.equal(foo.extnameAllCaps('file.txt'), '.TXT');