【问题标题】:Testing Custom Modules with DOH使用 DOH 测试自定义模块
【发布时间】:2013-09-23 16:20:49
【问题描述】:

我正在尝试为我无法控制的旧 JS 文件/模块构建一些单元测试。

JS 模块使用以下模式构建...

var myModule = {
    myMethod:function() {
    }
};

然后我正在尝试构建一个 DOH 测试工具来测试这一点。我尝试了以下...

require([
    "doh/runner",
    "../../myModules/myModule.js"
    ], function(doh) {
        console.log(doh);
        console.log(myModule);
    });

该文件似乎可以正常提取,但我无法引用其中的任何内容。 “console.log(myModule);”只是返回未定义。

有人知道我如何在 DOH 测试工具中正确包含外部非 dojo 模块 JS 文件吗?

谢谢

【问题讨论】:

  • myModule 是否在旧 JS 模块中的任何地方返回?如果是这样,您需要将其添加到您的回调中,就像提到的@DesertIvy 一样。如果不是,它只是为一些全局变量赋值,你可能需要通过将它们挂在全局对象上来确保它们实际上是全局的,例如window 并像 window.myModule 一样访问它。
  • myModule 不会在旧 JS 模块的任何地方返回。怎么把它挂在窗外?
  • 也许window.myModule = myModule 在你的模块文件的底部?
  • 正如我在另一条评论中指出的:它应该是 require 依赖列表中的“myModules/myModule”。不要包含文件扩展名。

标签: javascript dojo doh


【解决方案1】:

除了你不应该使用 DOH,因为它已被弃用(使用 Intern),你没有理由不在那里看到 myModule。您使用的是脚本地址而不是模块 ID,这是不正确的,并且您使用的是带有 require 调用的相对路径,这也是不正确的,但是如果这些事情中的任何一个阻止加载程序找到并加载您尝试加载的脚本应该会引发您可以在控制台中看到的错误。唯一的另一种可能性是您以某种方式设法在此myModule 脚本中构建了一个内置层,在这种情况下,整个脚本最终被包裹在一个闭包中,因此使用var foo 将不再定义全局变量foo

【讨论】:

  • 很想使用 Intern,但技术的选择是很久以前做出的,不在我的控制范围内。
  • 根据OP提供的信息,它,其实是唯一的另一种可能。在标准浏览器 JS 文件中使用标准 JS 对象字面量时,模块没有“返回”。我也不确定如何指出两个潜在的错误,以及如果加载程序失败,用户应该期望看到什么,是无益且非建设性的,所以如果你不投反对票然后留下讨厌的东西,我将不胜感激厘米。谢谢!
  • 我相信这个答案至少在正确的轨道上,因为它指出 myModule 依赖项并没有真正被正确引用。至于预期的结果究竟应该是什么,目前任何人都可以猜测,因为我们没有关于 OP 的文件系统结构或该模块的内容的信息。如果没有足够的信息来接近,就很难接近 OP。
  • 意外构建了一个层并不是导致此问题的唯一其他可能原因。而我的评论(我再也找不到了?)绝不是为了令人讨厌。在require 中使用相对路径不是问题。告诉某人使用不同的库而不是回答问题并不是一个好的答案。基于您指出require 语句中有一个脚本地址这一事实,我没有投票,这可能是问题的一部分。
【解决方案2】:

您需要在函数回调中声明myModule 到您的require 语句:

require([
    "doh/runner",
    "../../myModules/myModule"
], function(doh, myModule) { // <-- include myModule
    console.log(doh);
    console.log(myModule);
});

请确保 myModule.js 返回您的模块。

【讨论】:

  • 如果从模块文件返回myModule,则无需创建小部件。很多 dojo 模块不是小部件,并且很多遵循@fatlog 模块的模式,其中返回一个静态对象。
  • 您能否更新您的原始帖子以反映您尝试过的最新代码?
  • 为此,myModule 必须返回一个值。 See the documentation for the deprecated dojo.provide() code
  • require 语句中也应该是“myModules/myModule”。您不应该将文件扩展名放在 require 依赖项列表中。
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 2021-09-23
  • 2016-03-13
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
相关资源
最近更新 更多