Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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 在node.js中自动生成存根模块_Javascript_Node.js_Mocha.js_Jestjs - Fatal编程技术网

Javascript 在node.js中自动生成存根模块

Javascript 在node.js中自动生成存根模块,javascript,node.js,mocha.js,jestjs,Javascript,Node.js,Mocha.js,Jestjs,我正在将我的JavaScript测试代码从Jest迁移到Mocha。Jest的一个很好的特性是它会自动为您的模块生成。这些存根实现了与原始存根相同的API,但它们的所有函数都返回未定义的。导出的类也是存根的,即它们具有与原始类相同的所有方法,但返回未定义: //mymodule.js var MyClass=function(){this.foo=42;}; MyClass.prototype.getFoo=function(){返回this.foo;}; module.exports={ my

我正在将我的JavaScript测试代码从Jest迁移到Mocha。Jest的一个很好的特性是它会自动为您的模块生成。这些存根实现了与原始存根相同的API,但它们的所有函数都返回
未定义的
。导出的类也是存根的,即它们具有与原始类相同的所有方法,但返回未定义:

//mymodule.js
var MyClass=function(){this.foo=42;};
MyClass.prototype.getFoo=function(){返回this.foo;};
module.exports={
myclass:myclass,
myfunction:function(){return 42;}
};
/\uuuuu测试\uuuu/mymodule-test.js
var mm=require('../mymodule');//Jest自动模拟此模块。
描述('test',function()){
它('函数和构造函数被模拟',函数(){
expect(mm.myfunction()).toEqual(未定义);//函数已存根
var mc=新的mm.myclass();
expect(mc.getFoo()).toEqual(未定义);//原型上的fn是存根的。
});
});
出于各种原因,我将转向MochaJS,但我希望保留这种存根行为。我可以使用proxyquire为模块注入存根。但我需要自己定义存根

我想要的是一个函数,它接受一个节点模块并返回类似于Jest自动模拟版本的模块。Jest的代码就是这样的。为此,我自己编写了一些代码(包括下面的代码)。但这是相当棘手的,感觉不象我应该写的代码

有没有一个标准的库来做这个

以下是我写的:

//stuber.js
var U=要求('下划线');
函数替换函数stubs(rootObj){
var replacedObjs=[];//由[original,replacement]对组成的数组。
功能先前替换(obj){
对于(var i=0;i
我真的觉得Jest应该专注于这样做。使用另一个库来实现Jest的其余功能。我不想使用Jest的原因是因为它迫使您使用Jasmine etcMy这个问题的最终解决方案是用于测试。对于最近的React项目,我一直在使用浏览器中的Mocha进行测试。一旦进入浏览器,像sinon这样的工具就不会像这个问题中提到的那样让人头疼了。你能找到一种自动模拟所需模块的方法吗?我知道sinon能帮上忙,但据我所知,它不是自动的。你可能可以用存根生成版本覆盖
require
,但坦率地说,我认为自动模拟是个坏主意。您应该模拟模块的白名单,而不是模拟除黑名单以外的所有模块。模仿一切意味着内部重构将破坏所有测试。