Javascript intern.js中的负载测试CScript内部测试

Javascript intern.js中的负载测试CScript内部测试,javascript,intern,Javascript,Intern,我正在尝试根据通过start命令传递的自定义参数加载测试脚本,以启动intern测试。 为此,我试图在测试中要求特定的测试脚本,但我得到尝试要求卸载模块错误。 这是我的代码设置。是否有人可以在这方面提供帮助,或者建议一些替代方案来实现这一目标 define(function (require) { var intern = require('intern'); var AdvalentAutomationTestSuite = require('intern!object'); Advalent

我正在尝试根据通过start命令传递的自定义参数加载测试脚本,以启动intern测试。 为此,我试图在测试中要求特定的测试脚本,但我得到
尝试要求卸载模块
错误。
这是我的代码设置。是否有人可以在这方面提供帮助,或者建议一些替代方案来实现这一目标

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
文件中解决了。我也在这篇文章中添加了我的解决方案作为答案。请在回顾我的方法后,建议是否有更好的方法来解决。