Rewire - 同一模块中的模拟依赖关系

时间:2016-12-22 19:40:20

标签: javascript unit-testing mocking

假设我有一个具有两个功能的模块,其中一个依赖于另一个:

// example.js
function A() {
    return "hello";
}

function B() {
    return A();
}

module.exports.B = B;

我可以使用重新连接来模拟B()中对A()的调用吗?

// example.test.js
var assert = require('chai').assert,
    rewire = require('rewire'),
    example = rewire('./example.js');

example.__set__({
    A: function( return 'goodbye';),
});

describe('test B in example.js', function() {
    it('should return "goodbye"', function() {
        assert.strictEqual(example.B(), 'goodbye');
    });
});

1 个答案:

答案 0 :(得分:0)

是的,这确实有效。我不确定究竟是什么解决了这个问题。以前我是将依赖函数导出为函数原型的一部分(例如function.prototype.dependentFunction = function() { };),并且不知何故这会弄乱重新连接。我通过首先声明/定义它然后将它附加到模型来重新定义我的函数:

function dependentFunction() { ... }
exportedObject.prototype.dependentFunction = dependentFunction();

这样做解决了我的问题。