在编写服务器端Javascript的单元测试时如何处理外部模块

时间:2019-02-11 06:03:53

标签: javascript unit-testing mocha chai

我正在单元测试具有指向外部模块的require的JS文件。如果运行UT继续在本地寻找该外部模块,该如何处理该外部模块?

我已经尝试从脚本中模拟一个函数,但是我认为这不是测试其组件的正确方法。我真正想要的是让我的测试文件指向脚本文件,并且该脚本文件将跳过对调用外部模块的var cordra = require('cordra'); var util = require('util'); exports.beforeSchemaValidation = beforeSchemaValidation; function beforeSchemaValidation(deal, context) { ... return deal; } 部分的调用,或者找到一种方法来覆盖或忽略该行,以便我可以开始引用脚本文件中进行单元测试所需的功能和组件。

Deal.js

var assert = require('chai').assert;
const beforeSchemaValidation = require('../rules/Deal').beforeSchemaValidation;

describe('Deal', function() {
  it('beforeSchemaValidation should return object', function() {
    let result = beforeSchemaValidation();
    assert.typeOf(result, Object);
  });
});

DealTest.js

../rules/Deal

我希望我的测试文件能够通过Error: Cannot find module 'cordra'运行,而不会引发'util'和/或{{1}}的错误,因此我可以测试其其余组件。

1 个答案:

答案 0 :(得分:0)

您需要按以下方式进行操作:

var cordra = require('cordra');
var util = require('util');

function beforeSchemaValidation(deal, context) {
...
return deal;
}

module.exports = {
beforeSchemaValidation: beforeSchemaValidation }