【问题标题】:intern.js How to test legacy non modular codeintern.js 如何测试遗留的非模块化代码
【发布时间】:2016-10-20 07:20:27
【问题描述】:

我使用 intern.js 作为测试框架来测试 dojo 模块,它运行良好。

现在我必须测试一些非模块化遗留代码,但我不能。

这是一个简单的测试文件示例:

var Component = function() {
  this.itWorks = function() {
    return true;
  }
};

这就是测试

define([
    'intern!object',
    'intern/chai!assert',
    'intern/order!controls/component',
], function (registerSuite, assert) {
    registerSuite({
        name: 'test legacy code',

        'simple test': function () {
            console.log(Component);
        }
    });
});

测试失败,提示“组件未定义”。

我注意到它只有在我写的时候才有效

window.Component = 组件

在要测试的文件底部。

我无法修改所有要测试的文件,是否可以用不同的方式测试文件?

【问题讨论】:

  • 你是如何加载你的文件的,你是如何加载实习生的?您是在 Node 环境还是浏览器中进行测试(我猜是浏览器是因为 window)。
  • 我正在使用 Intern 网页运行测试,我在浏览器环境中。

标签: testing legacy intern


【解决方案1】:

这应该可以正常工作。一个可能的问题是您从哪里加载component'intern/order!controls/component' 中的 'controls/component' 依赖项是相对于执行加载的文件而言的,除非有任何特殊的加载器配置。这意味着如果项目是这样设置的:

project/
    controls/
        component.js
    tests/
        intern.js
        componentTest.js

并且component 是从componentTest.js 加载的,那么依赖项应该是'intern/order!../controls/component.js'。 (在这种情况下,它实际上可以在没有 '../' 的情况下工作,因为 controls 是项目中的顶级目录。)

另一个潜在问题是非 AMD 标识符应使用 .js 后缀。这告诉加载器正在加载的东西是通用脚本而不是 AMD 模块。

另请注意,order 插件仅需要以特定顺序加载多个旧文件。如果顺序无关紧要,或者您只是加载一个脚本,您可以使用脚本本身 '../controls/component.js' 作为依赖项。

【讨论】:

  • 谢谢@jason0x43,但模块(或js)已正确加载。问题是我在测试中看不到课程。只有当我执行 window.Component = Component 时我才会看到它。你有什么建议吗?
  • 你能在某处发布一个完整的例子吗?另外,你用的是什么浏览器?我已经根据此处的描述自己设置了一个示例,并在 Chrome 中对其进行了测试,并且效果很好,因此我必须缺少其他一些条件。在测试文件的底部分配window.Component = Component 应该不会完成任何事情,因为如果您可以看到component 进行分配,那么它已经在测试范围内可见。
  • 我找到了错误!我正在使用 dojo 1.8 加载模块化脚本。正如文档所说:脚本的显式路径或 URL 可以作为模块标识符传递。在这种情况下,脚本只是被评估并且那个“模块”的返回值是未定义的。所以它不会起作用。您可以将 aysnc:true 放入 Intern.js dojo 配置中。
  • 在 1.8 中可以正常工作;正如它所说,脚本被评估(意味着你的类被加载到全局范围内),并且模块的值是未定义的,但前提是它是define回调中的参数。这只是意味着在这种情况下它将是未定义的:define([ ..., 'controls/component' ], function (..., Component) { ... });
【解决方案2】:

https://stackoverflow.com/tags" term="legacy" /">

"var Component" = function() {
  "this.itWorks" = function() {
    return=true;
  }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 2022-08-19
    • 2011-03-13
    相关资源
    最近更新 更多