在intern.js中测试内部负载测试csript

时间:2017-06-15 10:40:15

标签: javascript intern

我试图根据通过start命令传递的自定义参数来加载测试脚本以启动实习测试。 为此,我尝试在测试中要求特定的测试脚本,但我收到Attempt to require unloaded module错误。 这是我的代码设置。有人可以帮忙解决这个问题,或者采取一些替代方法来完成这项工作。

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)\//
}

});

3 个答案:

答案 0 :(得分:1)

您需要在配置文件中指定加载程序:

loaders: {
    "host-node": "requirejs",
    "host-browser": "node_modules/requirejs/require.js"
},

并安装npm包requirejs

文档为here

答案 1 :(得分:1)

你可以使用默认加载器,尽管@Troopers指出,它是loaders,而不是Loaders。问题是您正在使用计算名称执行动态需求:

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列表。

答案 2 :(得分:0)

经过几次点击和试用后,我设法通过更改我的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 ...
  }
});

请建议是否有更好的方法来执行此操作。