Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript依赖注入:如何模拟私有变量/函数的依赖关系?_Javascript_Node.js_Unit Testing_Mocking_Jasmine - Fatal编程技术网

Javascript依赖注入:如何模拟私有变量/函数的依赖关系?

Javascript依赖注入:如何模拟私有变量/函数的依赖关系?,javascript,node.js,unit-testing,mocking,jasmine,Javascript,Node.js,Unit Testing,Mocking,Jasmine,为下面的javascript/NodeJ提供依赖项注入的惯用方法是什么?我希望能够用自己的mock替换util、cfg和call_hard,以便于单元测试: /* file: platform.js */ var config = require('./config'), ConfigParser = require('./ConfigParser'), fs = require('fs'), util = require('./util'); function ad

为下面的javascript/NodeJ提供依赖项注入的惯用方法是什么?我希望能够用自己的mock替换util、cfg和call_hard,以便于单元测试:

/* file: platform.js */
var config = require('./config'),
    ConfigParser = require('./ConfigParser'),
    fs = require('fs'),
    util = require('./util');


function add(dir){
   var xml = util.getConfigFile(dir);
   var cfg = new ConfigParser(xml);
   return call_hard(xml, cfg);
}

function call_hard(xml, cfg){
   ...
}

module.exports.add = add;

/* end of file: platform.js */
1-为这段代码编写单元测试的最佳方法是什么?我希望能够用我的mock替换util、cfg和call_hard

我已将以下代码添加到我的platform.js文件中。它允许我提供我的模拟(我觉得不习惯):

2-或者我应该只编写集成测试而不去麻烦

3-关于如何用JavaScript编写更好的代码/单元测试,还有其他建议吗


4-我应该使用其他库、工具或透视图吗?欢迎任何建议。

你试过茉莉花间谍吗?你可以使用spyon(obj.method).andReturn(dummy)Hi@sruti,在这种情况下,没有jasmine间谍会帮不上忙,因为我们正在处理私有变量/对象/函数。
/* file: platform.js */
...
module.exports.set_util = function(new_util) {
   util = new_util;
};
module.exports.set_cfg= function(new_cfg) {
   cfg = new_cfg;
};
module.exports.set_call_hard= function(new_call_hard) {
   call_hard= new_call_hard;
};

/* end of file: platform.js */