javascript - Rewire - 同一模块中的模拟依赖

标签 javascript unit-testing mocking

假设我有一个包含两个函数的模块,其中一个函数依赖于另一个函数:

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

function B() {
    return A();
}

module.exports.B = B;

我可以使用 rewire 在 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');
    });
});

最佳答案

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

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

这样做解决了我的问题。

关于javascript - Rewire - 同一模块中的模拟依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41290560/

相关文章:

java - 为什么我尝试模拟 @Spy ObjectMapper 会导致 NPE?

JavaScript MySql 通过 URL 进行多行 INSERT 语句

c# - 我如何测试 void 方法?

javascript - Foundation-Apps angular 站点与 karma-jasmine 单元测试的集成

php - 在 Laravel 6 中模拟 Auth::user()

java - jUnit 在测试中跳过注入(inject)模拟方法中的方法调用

javascript - Angular JS : how to mock localStorgaeService with spyOn?

javascript - 如何让下面的jquery代码更加高效

javascript - 如何处理 Knockout ViewModel 中的空对象和满对象

javascript - (js/jquery) 在没有 Canvas 的情况下在 FF/Saf/Chrome 中旋转图像或缩放 Canvas 项目