Javascript intern.js中的负载测试CScript内部测试
我正在尝试根据通过start命令传递的自定义参数加载测试脚本,以启动intern测试。 为此,我试图在测试中要求特定的测试脚本,但我得到Javascript intern.js中的负载测试CScript内部测试,javascript,intern,Javascript,Intern,我正在尝试根据通过start命令传递的自定义参数加载测试脚本,以启动intern测试。 为此,我试图在测试中要求特定的测试脚本,但我得到尝试要求卸载模块错误。 这是我的代码设置。是否有人可以在这方面提供帮助,或者建议一些替代方案来实现这一目标 define(function (require) { var intern = require('intern'); var AdvalentAutomationTestSuite = require('intern!object'); Advalent
尝试要求卸载模块错误。
这是我的代码设置。是否有人可以在这方面提供帮助,或者建议一些替代方案来实现这一目标
define(function (require) {
var intern = require('intern');
var AdvalentAutomationTestSuite = require('intern!object');
AdvalentAutomationTestSuite({
name: 'Advalent Automation Test',
'AdvalentTestSets': function () {
return this.remote
.then(function () {
var product = intern.args.product;
var script = 'Automation/TestScripts/FRG/' + product + '-Config';
require(script)
})
},
});
});
更新:
包括intern.js
文件:
define(function (require) {
var intern = require('intern');
console.log(intern)
return {
proxyPort: 9000,
proxyUrl: 'http://localhost:9000/',
defaultTimeout: 120000,
capabilities: {
'selenium_version': '2.48.2',
},
environments: [
{browserName: 'chrome', version: '48', platform: ['WINDOWS'], chromeOptions: {args: ['start-maximized']}},
],
maxConcurrency: 3,
tunnel: 'NullTunnel',
reporters: [
{id: 'JUnit', filename: 'test-reports/report.xml'},
{id: 'Runner'},
],
Loaders: {
'host-node': 'dojo/dojo',
'host-browser': 'node_modules/dojo/dojo.js'
},
loaderOptions: {
packages: [{name: 'intern-tutorial', location: '.'}]
},
functionalSuites: [
'Automation/TestScripts/FRG/FRG-Config',
],
defaultTimeout: 70000,
excludeInstrumentation: /^(?:tests|node_modules)\//
}
})) 您需要在配置文件中指定加载程序:
loaders: {
"host-node": "requirejs",
"host-browser": "node_modules/requirejs/require.js"
},
并安装npm包requirejs
文档是您需要在配置文件中指定加载程序:
loaders: {
"host-node": "requirejs",
"host-browser": "node_modules/requirejs/require.js"
},
并安装npm包requirejs
文档是您应该可以使用默认的加载器,尽管@Troopers指出,它是加载器
,而不是加载器
。问题是您正在使用计算名称执行动态require:
var script = 'Automation/TestScripts/FRG/' + product + '-Config';
require(script)
AMD加载程序不完全支持require(script)
语法,因为它们不同步加载模块。在CJS兼容模式下写入模块时,加载程序会通过扫描模块代码进行require
调用,然后在执行模块代码之前预加载和缓存模块来伪造模块。当require(script)
调用最终执行时,将返回预加载的模块
使用计算模块名称时,加载程序无法预加载所需的模块,因此同步require
调用将失败。要加载具有计算名称的模块,您需要使用require([dependency])
语法,如:
var script = 'Automation/TestScripts/FRG/' + product + '-Config';
return new Promise(function (resolve) {
require([ script ], resolve);
});
不过,从更高的层面来看,在一开始的测试中这样做似乎很奇怪。它似乎应该在模块或配置级别处理。例如,假设'Automation/TestScripts/FRG/'+product+'-Config'
是一个功能测试套件,如果提供了所需的命令行参数,配置可以简单地将该套件添加到功能套件
列表中。尽管@Troopers指出,它是装载机
,而不是装载机
。问题是您正在使用计算名称执行动态require:
var script = 'Automation/TestScripts/FRG/' + product + '-Config';
require(script)
AMD加载程序不完全支持require(script)
语法,因为它们不同步加载模块。在CJS兼容模式下写入模块时,加载程序会通过扫描模块代码进行require
调用,然后在执行模块代码之前预加载和缓存模块来伪造模块。当require(script)
调用最终执行时,将返回预加载的模块
使用计算模块名称时,加载程序无法预加载所需的模块,因此同步require
调用将失败。要加载具有计算名称的模块,您需要使用require([dependency])
语法,如:
var script = 'Automation/TestScripts/FRG/' + product + '-Config';
return new Promise(function (resolve) {
require([ script ], resolve);
});
不过,从更高的层面来看,在一开始的测试中这样做似乎很奇怪。它似乎应该在模块或配置级别处理。例如,假设'Automation/TestScripts/FRG/'+product+'-Config'
是一个功能测试套件,如果提供了所需的命令行参数,配置可以简单地将该套件添加到functionalSuites
列表中。经过几次点击和试用后,我通过更改我的intern.js
使其正常工作,如下所示:
define(function (require) {
var intern = require('intern');
var product = intern.args.product
return {
functionalSuites: [
'Automation/TestScripts/FRG/' + product + '-Config.js',
],
// rest of config code ...
}
});
请建议是否有更好的方法来实现这一点。经过几次尝试后,我通过更改我的intern.js
使其正常工作,如下所示:
define(function (require) {
var intern = require('intern');
var product = intern.args.product
return {
functionalSuites: [
'Automation/TestScripts/FRG/' + product + '-Config.js',
],
// rest of config code ...
}
});
请建议是否有更好的方法来执行此操作。您的意思是我必须安装require.js
packae才能加载脚本吗。正如我在上述问题中所做的那样??你能详细说明一下吗?我的intern.js文件中已经定义了一个加载程序。在我的问题中,我也更新了intern.js文件。你的intern.js文件中的loaders部分不正确:使用loaders
而不是loaders
,使用require.js loader而不是dojo loader感谢你指出@Trooper。我将jason0x43答案标记为答案,因为它提供了更多信息。对不起的:(你的意思是我必须安装require.js
packae来加载脚本。正如我在上面的问题中所做的那样??请详细说明。我的intern.js文件中已经定义了一个加载程序。我在我的问题中也更新了intern.js文件。你的intern.js文件中的加载程序部分不正确:使用loaders
使用require.js loader而不是dojo loader感谢您指出@Trooper。我将jason0x43答案标记为答案,因为它提供了更多信息。抱歉:(感谢@jaso0x43这是启发。感谢分享知识。至于我从'intern.js
文件中解决的问题的解决方法。我也在这篇文章中添加了我的解决方案作为答案。请在回顾我的方法后建议是否有更好的方法。感谢@jaso0x43这是启发。感谢sharei关于我的问题的解决方法,我从'intern.js
文件中解决了。我也在这篇文章中添加了我的解决方案作为答案。请在回顾我的方法后,建议是否有更好的方法来解决。