Testing intern.js如何测试遗留的非模块化代码

Testing intern.js如何测试遗留的非模块化代码,testing,legacy,intern,Testing,Legacy,Intern,我使用intern.js作为测试框架来测试dojo模块,它运行良好 现在我必须测试一些非模块化的遗留代码,但我不能 这是一个要测试的简单文件示例: var组件=函数(){ this.itWorks=函数(){ 返回true; } }; 这应该行得通。一个可能的问题是从何处加载组件。“intern/order”中的“controls/component”依赖项!控件/组件“是相对于执行加载的文件的,除非有任何特殊的加载程序配置。这意味着,如果项目设置如下: project/ contr

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

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

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

var组件=函数(){
this.itWorks=函数(){
返回true;
}
};


这应该行得通。一个可能的问题是从何处加载
组件
“intern/order”中的“controls/component”依赖项!控件/组件“
是相对于执行加载的文件的,除非有任何特殊的加载程序配置。这意味着,如果项目设置如下:

project/
    controls/
        component.js
    tests/
        intern.js
        componentTest.js
并且正在从
componentTest.js
加载
component
,那么依赖项应该是
'intern/order/控件/component.js'
。(在这种情况下,它实际上不使用“../”,因为
controls
是项目中的顶级目录。)

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


还要注意,
order
插件仅用于按特定顺序加载多个旧文件。如果顺序不重要,或者您只是加载一个脚本,您可以使用脚本本身作为依赖项。

这应该可以正常工作。一个可能的问题是从何处加载
组件
“intern/order”中的“controls/component”依赖项!控件/组件“
是相对于执行加载的文件的,除非有任何特殊的加载程序配置。这意味着,如果项目设置如下:

project/
    controls/
        component.js
    tests/
        intern.js
        componentTest.js
并且正在从
componentTest.js
加载
component
,那么依赖项应该是
'intern/order/控件/component.js'
。(在这种情况下,它实际上不使用“../”,因为
controls
是项目中的顶级目录。)

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


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

您如何加载文件,以及如何加载Intern?您是在节点环境中还是在浏览器中进行测试(我猜测浏览器是因为
窗口
)。我使用Intern网页运行测试,我是在浏览器环境中。您如何加载文件,以及如何加载Intern?您是在节点环境中还是在浏览器中进行测试(我猜是浏览器,因为
窗口
)。我正在使用Intern网页运行测试,我是在浏览器环境中。谢谢@jason0x43,但模块(或js)已正确加载。问题是我看不到测试中的类。只有当我打开window.Component=Component时,我才能看到它。你有什么建议吗?你能在什么地方贴一个完整的例子吗?另外,您使用的浏览器是什么?我自己根据这里的描述设置了一个示例,并在Chrome中进行了测试,效果很好,所以我肯定还缺少其他一些条件。在测试文件底部分配
window.Component=Component
不应该完成任何事情,因为如果您可以看到
Component
来执行分配,那么它已经在测试范围内可见。我发现了错误!我正在使用Dojo1.8加载模块化脚本。正如文档所述:脚本的显式路径或URL可以作为模块标识符传递。在这种情况下,只对脚本求值,而该“模块”的返回值未定义。所以它不会起作用。将aysnc:true放入Intern.js dojo配置中就可以了;正如它所说的,脚本是经过计算的(这意味着您的类被加载到全局范围中),并且模块的值是未定义的,但前提是它是
define
回调中的一个参数。这只是意味着在这种情况下它将是未定义的:
define([…,'controls/component'],function(…,component){…})谢谢@jason0x43,但模块(或js)已正确加载。问题是我看不到测试中的类。只有当我打开window.Component=Component时,我才能看到它。你有什么建议吗?你能在什么地方贴一个完整的例子吗?另外,您使用的浏览器是什么?我自己根据这里的描述设置了一个示例,并在Chrome中进行了测试,效果很好,所以我肯定还缺少其他一些条件。在测试文件底部分配
window.Component=Component
不应该完成任何事情,因为如果您可以看到
Component
来执行分配,那么它已经在测试范围内可见。我发现了错误!我正在使用Dojo1.8加载模块化脚本。正如文档所述:脚本的显式路径或URL可以作为模块标识符传递。在这种情况下,只对脚本求值,而该“模块”的返回值未定义。所以它不会起作用。将aysnc:true放入Intern.js dojo配置中就可以了;正如它所说的,脚本是经过计算的(这意味着您的类被加载到全局范围中),并且模块的值是未定义的,但前提是它是
define
回调中的一个参数。这只是意味着在这种情况下它将是未定义的:
define([…,'controls/component'],function(…,component){…})