问题标签 [proxyquire]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 使用 proxyquire 在 3rd 方模块依赖项中存根 require
我正在尝试使用 proxyquire 在第 3 方模块所需的模块中存根 require。
例子:
我的模块需要一个名为“foo”的第三个模块。
该模块依赖于另一个名为“bar”的库,并且在 bar 中有一个我想模拟的要求。这可能吗?
在名为“三”的第 3 方库中:
在酒吧库中:
然后在我的测试中是这样的:
编辑:
我想我想要的是这样的:
但是,如果我在 bar 库中放置一个控制台日志并在需要之后打印出 thingiwanttomock 变量是什么,则它不是我的模拟对象。
在酒吧库中:
proxyquire 真的会改变从依赖库中的 require 语句中提取的内容吗?也许这就是我的困惑所在。
javascript - 用 proxyquire 模拟 MongoDB
我想 通过在我的测试中使用proxyquire来模拟 MongoDB 依赖项:
在每个语句之前:
当我去控制器并执行 console.log(mongoose.isMocked) 时,我得到了 undefined 并且如果我打印 mongoose.model.toString() 似乎 mongoose 方法没有被覆盖。
我跟进了这篇文章并尝试实现相同的逻辑,但我没有得到相同的结果。
任何帮助将不胜感激,谢谢!
javascript - 使用 Node.js 的 proxyquire 模拟匿名函数?
是否可以使用带有 Node.js 的 proxyquire 来模拟匿名函数?我有一个模块需要模拟,其构造函数是匿名类。是否可以使用 proxyquire 来模拟它,还是有另一种方法可以做到这一点?
我使用 proxyquire 的原因是因为它是我正在为其编写单元测试的文件“必需”的模块。
代码示例和返回的函数如下:
这将返回一个匿名函数,该函数将配置作为参数。
javascript - 在 Node.js 中模拟嵌套模块?
我有这些文件:
文件1.js
文件2.js
现在在为 File2 编写单元测试时,是否可以进行mod1
模拟,以便我不调用mod1.someFunction()
?
javascript - 节点模块的映射路径,用于单元测试
客户端我使用 SystemJS 将模块路径存根,如下所示
所以require('root-components/foo');
会映射到applicationRoot/rootComponents/foo
.
问题是,如果我在 Mocha 中运行一个模块require('root-components/foo');
,Node 不知道该路径的含义。有没有一种理智的方法可以在 Node 中完成这个路径映射?
Proxyquire 能做到这一点吗?我通读了他们的文档,但没有发现任何迹象表明它是。
这仅用于单元测试,因此我对使用任何类型的派对实用程序的任何解决方案都很满意。
node.js - Node.js 存根 request.get() 以立即调用回调
我正在尝试测试一个在其中调用request.get()
函数的函数。
我正在尝试覆盖回调函数的所有分支。我试图在不将回调函数分离到不同函数的情况下实现它,因为它使用了上闭包的变量。
这是一个示例来说明.. foo.js:
我试图用 sinon 和 proxyquire 来存根它。
foo.spec.js(用 sinon 存根):
foo.spec.js(用 proxyquire 存根):
也没有工作。当我尝试调试时,我从未点击过回调函数,这表明我没有request.get()
正确地存根该方法,使其仍然是异步操作。我很感激有人告诉我在两种情况下我做错了什么(sinon 和 proxyquire)以及如何解决它的示例。
node.js - 防止proxyquire调用原始代码?
我正在尝试围绕猫鼬模型进行测试。
我使用proxyquire对其进行整体模拟,但是由于原始文件注册了模型,所以我得到了
既然我需要的一切都已经被 proxyquire 注入了,我怎么能告诉它不加载模型呢?
测试代码:
模型/Test.js:
测试/test.js:
我发现的另一种方法是在 Test 中代理 mongoose,并对其进行模拟以防止注册,但这将是很多代码,而且我还有其他测试,该模型被称为 4 或 5 层深,因此代理查询每个级别真的很麻烦,而我可以模拟更高的功能。
javascript - 测试节点快速端点和存根 3rd 方 api 调用
我有一个这样的快递应用程序:
服务器.js
post_controller.js
post.js
规范/posts_controller_spec.js
我的目标是消除thirdPartyApi.get()
. 我尝试proxyquire
将此行添加到posts_controller_spec:
这不起作用,因为 server.js 文件是再次需要 third_party_api 的文件。
我可以做这样的事情来测试控制器:
第二个策略感觉不对,因为现在我必须存根req
,res
现在我绕过了实际app
实例。
有没有一种简单的方法可以做到这一点,使用 proxyquire 或其他方式?
node.js - Node Stub 一个返回对象的方法
我有一个具有一些属性的模块。我正在使用它如下
我必须模拟这个进行测试。下面的代码使用了proxyquire和sinon
上面的代码有效。但是在测试时,get 方法调用返回一个对象。get(min) 返回一个对象。var a = prop.get() 然后 a('min') 返回 3。但是 prop.get('min') 返回一个对象。
如何修改存根以返回 get 调用的值?