Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 用模拟函数替换nodejs模块中的函数_Javascript_Json_Node.js_Unit Testing_Nodeunit - Fatal编程技术网

Javascript 用模拟函数替换nodejs模块中的函数

Javascript 用模拟函数替换nodejs模块中的函数,javascript,json,node.js,unit-testing,nodeunit,Javascript,Json,Node.js,Unit Testing,Nodeunit,我正在nodejs中创建一个小项目,它是API的包装器。我正在使用编写一些单元测试,并且需要将各种模拟函数注入模块(例如,模拟向服务器发出HTTP请求并输出各种不同响应以测试代码的函数) 我的问题是如何将这些函数注入到我的模块中 我已经确定了两种理论上可行的方法,如下所示: var module = require('./module')({ option1: '', option2: '', ... }); 方法1 重命名我要替换的模块的文件夹,并添加一个包含我要注入的代码的新文

我正在nodejs中创建一个小项目,它是API的包装器。我正在使用编写一些单元测试,并且需要将各种模拟函数注入模块(例如,模拟向服务器发出HTTP请求并输出各种不同响应以测试代码的函数)

我的问题是如何将这些函数注入到我的模块中

我已经确定了两种理论上可行的方法,如下所示:

var module = require('./module')({
  option1: '',
  option2: '',
  ...
});
方法1 重命名我要替换的模块的文件夹,并添加一个包含我要注入的代码的新文件夹,例如:

./node_modules/request -> ./node_modules/request.tmp
./tests/myRandomFunction -> ./node_modules/request
执行测试后,我将执行相反的操作:

./node_modules/request -> ./tests/myRandomFunction
./node_modules/request.tmp -> ./node_modules/request
这似乎有点老套,我不想尝试,尽管理论上它应该可以工作

方法2 这是我使用模块初始化的首选方法。我的模块采用JSON对象,该对象可以包含以下各种选项:

var module = require('./module')({
  option1: '',
  option2: '',
  ...
});
我计划向这个JSON对象添加一个名为“_testing”的键,该键的值为包含各种函数的JSON对象,例如:

var module = require('./module')({
  _testing: {
    request: function() {return false;}
  }
});
在我的模块中,我可以执行以下操作:

  • 如果此测试存在并且是JSON对象
  • 在这个上面循环
  • 对于本测试中的每个键。\u
  • 将与键同名的函数替换为其值,例如

是否有更好的方法在我的模块中插入/替换函数以进行测试?

我已经为此使用了

用于测试HTTP调用

它们都提供了更干净的方法,这被称为“模仿”或“存根”。这是测试时常见的必要条件,并且有各种各样的库。可能最受欢迎的是

使用Sinon,您可以执行类似于
var stub=Sinon.stub(请求,[methodName])的操作。返回(false)
(或任何其他返回值)。您还可以执行类似于stub的操作。期望(42)断言函数在调用时将其作为参数接收