gpt4 book ai didi

unit-testing - 我可以在加载 Node 模块之前将全局变量注入(inject)到该模块中吗?

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:48 25 4
gpt4 key购买 nike

我正在编写一个面向浏览器的应用程序,并且我想为我的库代码编写自动化测试。我想在浏览器之外的命令行环境中运行这些测试,例如 Node 。我还没有选择测试框架,尽管我倾向于像 Mocha 这样的 BDD 框架。或Jasmine .

我的代码依赖于Knockout的可观察性质。不幸的是,Knockout 库不仅包含可观察的属性,还包含将它们绑定(bind)到 DOM 的代码。因此,如果我只是尝试从 Node 中 require() Knockout 库,我会收到错误,因为该库试图引用 Node 中未定义的 windownavigatordocument 变量。 Knockout 实际上并没有太多使用这些变量——它主要只是对 DOM 绑定(bind)进行一些功能检测,这对我来说并不重要——但因为它确实使用了它们,所以 Node 甚至不会加载文件。

所以这是我的问题:我可以在模块加载时将虚拟变量注入(inject)到模块中吗?我可以说“在加载源文件之后,但在开始运行它之前,让我在模块内设置一些变量,以便代码能够成功运行”吗?

我知道CoffeeScript已经修补了 Node 的模块加载器,以便除了 .js 之外它还可以加载 .coffee 文件;所以看起来可能还有一些方法可以修补它以注入(inject)变量,如果我知道如何的话。

最佳答案

是的,是的,你可以——创建它们然后使用它们,全局变量没有隔离性。

或者,您可能希望以文本方式将填充程序包裹在代码周围,将它们提供在闭包内。 jsdom 执行类似的操作来运行 jQuery。 (它为此提供了一个真正的 DOM!)

关于unit-testing - 我可以在加载 Node 模块之前将全局变量注入(inject)到该模块中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8874721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com