2011-11-23 20 views
0

我知道Stackoverflow中有很多關於這個的討論,但我無法得到直接的答案。而且我不太瞭解咖啡文字。Coffeescript中的匿名函數如何測試

基本上,我有這樣的CoffeeScript

return42 = -> 42

當我編譯我得到它的包裹在其中它不會暴露在世界的匿名函數這

 

(function() { 
    var return42; 

    return42 = function() { 
    return 42; 
    }; 

}).call(this); 
 

這樣的功能。所以當我寫這個測試時

 

describe "Test number", -> 
    it "is 42", -> 
     expect(return42()).toBe 42 
 

測試會失敗,因爲return42()是未定義的。我怎麼能解決這個問題。

非常感謝。 :-)

回答

1

您需要一個全局變量作爲程序的入口點。您可以通過將函數附加到全局對象而不是將其保留在函數本地來實現該功能。試試這個這個代替:

@return42 = -> 42 

,這將給你:

(function() { 
    this.return42 = function() { 
    return 42; 
    }; 
}).call(this); 

如果你只在瀏覽器中,而不是Node.js的運行這一點,那將是多一點地道附加到window而不是this,儘管它們在這種情況下都是全局對象。

0

雖然吉米是正確的,我會補充說,如果你不需要公開該功能,那麼你不需要測試它。而是測試使用該功能的公共API。只要您的公共API依賴於您的私有實現,那麼如果私有函數也失敗,測試應該會失敗。