2016-10-20 35 views
1

我使用intern.js作爲測試框架來測試dojo模塊,它運行良好。intern.js如何測試傳統的非模塊化代碼

現在我必須測試一些非模塊化的遺留代碼,但我不能。

這是一個簡單文件來測試一個例子:

var Component = function() { 
 
    this.itWorks = function() { 
 
    return true; 
 
    } 
 
};

這是測試

define([ 
 
    'intern!object', 
 
    'intern/chai!assert', 
 
    'intern/order!controls/component', 
 
], function (registerSuite, assert) { 
 
    registerSuite({ 
 
     name: 'test legacy code', 
 

 
     'simple test': function() { 
 
      console.log(Component); 
 
     } 
 
    }); 
 
});

測試輝ls sayng表示「組件未定義」。

我已經注意到,它只能如果我寫

window.Component =組件

在文件來測試底部。

我無法修改所有要測試的文件,是否可以用不同的方式測試該文件?

+0

你是如何加載你的文件,以及如何加載實習生?您是在Node環境還是瀏覽器中測試(我正在猜測瀏覽器是因爲'window')。 – jason0x43

+0

我正在使用實習生網頁來運行測試,我在瀏覽器環境中。 – scosmaa

回答

-1

< 「/」 https://stackoverflow.com/tags 「一詞=」 遺產」/「>

< 」!/ - 開頭段:JS隱藏:假控制檯:真通天:假 - 「/」>

"var Component" = function() { 
    "this.itWorks" = function() { 
    return=true; 
    } 
}; 

< 「/」 - !結束片段 - 「/」>

1

這應該正常工作的一個可能的問題是,你在哪裏加載。from。相對於加載文件,'intern/order!controls/component'中的「控件/組件」依賴項禁止任何特殊的加載程序配置。這意味着,如果該項目是建立這樣的:

project/ 
    controls/ 
     component.js 
    tests/ 
     intern.js 
     componentTest.js 

component正在從componentTest.js加載,則相關性應該是'intern/order!../controls/component.js'。 (因爲controls是該項目中的頂級目錄,所以它實際上在沒有'../'的情況下工作。)

另一個潛在的問題是非AMD標識符應該使用.js後綴。這告訴加載器,加載的東西是一個通用腳本而不是AMD模塊。

另請注意,order插件僅用於以特定順序加載多箇舊文件。如果順序無關緊要,或者您只是加載一個腳本,則可以使用腳本本身'../controls/component.js'作爲依賴項。

+0

謝謝@ jason0x43,但模塊(或js)已正確加載。問題是我看不到測試中的類。我只看到它,如果我做window.Component =組件。你有什麼建議嗎? – scosmaa

+0

你可以發佈一個完整的例子嗎?另外,你使用的是什麼瀏覽器?我已經在此處描述了自己的示例並在Chrome中進行了測試,並且它運行良好,所以必須還有其他一些缺失的條件。在測試文件底部指定'window.Component = Component'不應該做任何事情,因爲如果你可以看到'component'來完成這個任務,那麼它已經在測試範圍內可見了。 – jason0x43

+0

我找到了錯誤!我使用dojo 1.8來加載模塊化腳本。正如文檔所述:**一個明確的腳本路徑或URL可以作爲模塊標識符傳遞。在這種情況下,簡單地評估腳本並且該「模塊」的返回值是未定義的**。所以它不會工作。你可以在Intern.js dojo配置中使用aysnc:true。 – scosmaa