0

我正在开发一个现有的节点项目,其中大多数 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 的信息,但不确定如何使用它们来模拟全局变量。

任何帮助/方向表示赞赏。

4

1 回答 1

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');
于 2017-07-06T18:51:54.553 回答