我有一個使用以下類(用coffeescript編寫)的javascript自動完成插件:Query,Suggestion,SuggestionCollection和Autocomplete。這些類中的每一個都有用Jasmine編寫的相關規範。如何在不污染全局名稱空間的情況下爲單元測試公開JavaScript對象
該插件模塊內所定義,例如:
(function(){
// plugin...
}).call(this);
這防止了類從污染全局命名空間,而且還從任何測試隱藏它們(茉莉花規格,或單元測試的東西,如q-單元)。
在不污染全局名稱空間的情況下公開JavaScript類或對象進行測試的最佳方法是什麼?
我會回答我提出的解決方案,但我希望有更標準的東西。
更新:我嘗試的解決方案
因爲我與< 100 XP對於新手,我不能回答我的問題8小時。而不是等待,我只會添加我在這裏做的。
爲了規範這些類,我發明了一個名爲_test
的全局對象,我公開了所有的類進行測試。例如,在CoffeeScript中:
class Query
// ...
class Suggestion
// ...
// Use the classes
// Expose the classes for testing
window._test = {
Query: Query
Suggestion: Suggestion
}
裏面我的規格,那麼,我可以透露類我測試:
Query = window._test.Query
describe 'Query', ->
// ...
這樣做的好處,只有_test
對象是污染,它它不太可能會與這個對象的另一個定義相沖突。儘管如此,它仍然沒有我想要的那麼幹淨。我希望有人會提供更好的解決方案。
也許暴露了一些內部變量,只?例如:'window.exposedVars = this'(封閉的內部)? – 2011-12-20 01:20:34
我在發佈此文章後幾秒鐘剛添加了我的建議解決方案。這是否符合你的建議? – Mitch 2011-12-20 01:30:28
你的插件如何有用,仍然沒有添加任何東西到全局命名空間?我真的很好奇,也許你正在做一些我不知道的事情。據我所知,必須至少有一個對象出現在全局名稱空間中。 – 2011-12-20 01:38:28