问题标签 [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 调用原始文件而不是存根
嗨,我正在尝试使用 proxyquire 在我的控制器中模拟模型。但是由于某种原因,当尝试注入模拟时,正在调用原始文件。
这就是控制器内部需要我的模型的方式:
这就是我的方式,试图存根模型
但是当我运行我的测试时,我得到了这个错误
我的问题是,如果理论上不会调用原始 products.model.js 模块,为什么我会得到这个。
browserify - 使用 Karma、Browserify 和 Proxyquireify 对 Vuejs 进行单元测试并抛出错误
我一直在使用vue-cli browserify模板,并且一直在做一些单元测试。但是我无法让 proxyquireify 工作。如果您查看测试文件夹,那里有一个测试引用此文件以使用模拟进行测试。但是,每当我按照该示例进行操作时,都会得到以下信息:
所以我想我的问题是双重的。
- 有没有人使用 Vue、Browserify 和 Proxyquerify 进行工作设置
- 如果没有,是否有人有模拟外部依赖项的工作方式?
去测试:
- 通过 vue-cli 安装模板
- 编辑 test/unit/Hello.spec.js 以包含如下所示的模拟 dep:此文件
- 跑
npm test
- 您应该收到一个错误。
干杯
javascript - proxyquire 不存根方法调用
我试图用它proxyquire
来替换我正在测试的模块中的方法调用,但它正在调用该方法,尽管我已经设置了存根。我究竟做错了什么?
formsReducer.test.js:
formsReducer.js:
formsHelper.getFormsByProductId
如果testBlueprints
通过proxyquire
. 我究竟做错了什么?
javascript - 不替换模块中的每个函数时,proxyquire TypeError
我正在尝试使用proxyquire
单元测试我的 Redux 减速器。我需要在我的测试中替换一个函数的功能,但保留另一个函数的原始功能,根据proxyquire's
文档这是可能的。
formsReducer.test.js:
formsReducer.js:
我需要替换的功能formsHelper.getFormsByProductId()
但保留的原始功能formsHelper.addOrRemoveMnDisclosure()
- 正如您在proxyquire
块中看到的那样,我只是替换getFormsByProductId()
功能。但是,当我这样做时,会出现以下错误:TypeError: _FormsHelper2.default.addOrRemoveMnDisclosure is not a function
. 看起来是 babel 或我export default
的 for FormHelper 的问题。
FormsHelper 的导出如下所示:
export default class FormsHelper { ...methods and whatnot }
.
我该如何解决这个问题?
node.js - Proxyquire 模块未正确处理对文件所做的更改
我对我的文件“config.js”进行了一些更改,这是要在 nmodule 中测试“file.js”所必需的。
我创建了一个文件 fileTest.js,它有两个描述方法来测试 file.js 的两个不同场景。
- config.js 中 currentEnv 为“AAAA”时的测试用例
- config.js 中 currentEnv 为“OOOO”时的测试用例
我通常为 currentEnv "AAAA" 及其工作文件创建了测试用例。但是如果 currentEnv 是“OOO”,则要覆盖的部分在 file.js 中没有得到覆盖。对于这两种测试用例,我都必须覆盖 config.js 中的对象。谁能帮我这个。
node.js - 我可以在 TypeScript 中使用自定义模块解析函数(如“proxyquire”)代替 require() 吗?
我有一个config.ts
将与节点一起运行的 TypeScript 文件:
在其他 TypeScript 文件中,我可以import
使用完全类型安全的文件:
现在我想对这个脚本进行单元测试。为了模拟这个脚本require()
的依赖关系,我正在使用proxyquire,它让我可以提供我的脚本在调用require()
. 这是我的测试可能的样子:
这很好用,除了我的config
变量是类型的any
,因为我使用proxyquire()
的是require()
. TypeScript 必须对require()
函数进行特殊处理以允许它执行模块解析。有没有办法告诉 TypeScript 编译器也proxyquire()
应该进行模块解析,类似于require()
?
我可以重写config.ts
为一个类或让它使用一个接口。然后,我将能够通过导入类/接口定义在我的测试中显式键入变量。但是允许proxyquire()
为我隐式输入内容将是更容易的解决方案。
javascript - proxyquire 与 require.exports = ClassConstructor
如果我有一个导出单个类的模块,我该如何模拟/存根它proxyquire
?
目前我有以下,这似乎工作,但相当冗长并且没有正确使用proxyquire
:
一些类.js
我的模块.js
测试我的模块.js
请注意,我对模拟(和测试!)相当陌生,所以我可能会遗漏一些明显的东西,但我希望这proxyquire
能解决我的问题本身(而不是我需要使用另一个库或编写上面的代码)。
javascript - 存根和代理
在使用 proxyquire 后,我在使用 sinon 存根特定函数时遇到问题。
例子:
我知道它不起作用,因为它调用原始的 doStuff 而不是模拟/存根的 doStuff。
node.js - 使用 proxyquire 跨多个测试文件模拟需求的策略(NodeJS)
我在一些 API 文件中使用了 Redis 缓存,这意味着我需要在测试中模拟一个依赖项。假设我有以下文件结构
假设那些带有 * 的文件redis-connection
作为依赖项,然后我可以spec.js
使用 Proxyquire 在相应的文件中进行模拟。
简单的。
当我运行所有测试时,问题就来了,Mocha 启动了服务器。所有这些文件都将被带入我的文件中routes.js
,但由于 Redis 未运行而失败。我可以看到一些解决方法:
- 全局模拟 proxyquire -文档不喜欢这样。
- 我当前的解决方法,在每个
redis-connection
需要的文件中,有条件地导入真实的东西或基本的模拟 ifprocess.env.NODE_ENV === 'test'
。然后,如果您需要特定的行为,请将此模拟代理为相关规范文件中更有用的模拟。令人费解,但似乎有效。 redis-connection
为每个规范文件中的每次出现创建一个模拟。听起来很难管理。当 Mocha 最初运行服务器时也可能不起作用
有没有其他方法可以解决这个问题?我觉得我的解决方法可能暂时有效,因为我不经常使用这种依赖项,但我更喜欢可扩展的解决方案。
谢谢
unit-testing - 单元测试:导入的 TypeScript 依赖项使用的模拟文档?
我需要以某种方式模拟该document
对象,以便能够对遗留的 TypeScript 类进行单元测试。该类导入另一个类View.ts
(import
document
我的进口链:
controller.ts -> view.ts -> dragula -> crossvent -> 自定义事件
我得到的错误:
ReferenceError:文档未定义
View
尝试使用proxyquire模拟,如下所示:
View
我的问题是,由于import
语句,甚至在初始化之前就会弹出错误。