2017-06-15 125 views
0

我想根據通過啓動命令傳遞的自定義參數加載測試腳本來開始實習測試。 要做到這一點,我試圖要求在測試中的具體測試腳本,但我得到Attempt to require unloaded module錯誤。 這是我的代碼設置。有人可以幫助解決這個問題,或者採取一些替代方法來完成這項工作。負載測試csript intern.js內測試

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

});

回答

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

+0

感謝@ jaso0x43這是啓示。感謝分享知識。至於我的問題的解決方法,我解決了如果從'intern.js'文件。我也添加了我的解決方案作爲在這篇文章中的答案。請在回顧我的方式後建議是否有更好的方法來做到這一點。 – CodeBlooded

1

您需要在您的配置文件來指定裝載機:

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

並安裝NPM包requirejs

的文檔here

+0

你的意思是我必須安裝'require.js' packae加載腳本。正如我在上述問題中所做的一樣?你能否詳細說明一下。 – CodeBlooded

+0

我的intern.js文件中已經定義了一個加載器。我updatin我的問題也包括intern.js文件。 – CodeBlooded

+0

您的加載程序部分在您的intern.js文件中不正確:使用'loaders'而不是'Loaders'並使用require.js加載程序代替dojo加載程序 – Troopers

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 ... 
    } 
}); 

請建議,如果有什麼更好的辦法來做到這一點。