2011-04-05 143 views
8

我正在嘗試使用Jasmine進行單元測試,以編寫用coffeescript編寫的小應用程序。我發現很多消息來源說單元測試可以完美地完成從coffeescript編譯的JS。你如何訪問JS代碼的數據和邏輯,如果所有東西都被封裝在匿名函數中以避免污染名稱空間?是每次只用-b標誌運行編譯器的唯一解決方案嗎?Coffeescript +單元測試:全局變量?

回答

9

您應該根據您從CoffeeScript模塊公開的公共接口進行測試。如果你的模塊被稱爲Foo並公開兩個公共方法,barbaz,你可以按照以下方式將其導出:

Foo = 
    bar: (a, b) -> 
     #implementation 
    baz: (c) -> 
     #implementation 
(exports ? this).Foo = Foo 

當然也有對這種模式其他變化。例如,請參閱underscore.coffee。現在你已經暴露了你的公共接口,只要以適當的方式將它提供給你的Jasmine測試。如果您使用茉莉花節點,例如,你會做以下幾點:然後

Foo = require('foo') #assuming your module is compiled to foo.js 

你的測試將調用Foo.barFoo.baz

3

在有些情況下是有意義的使用-b極少數情況下,普通的測試不是其中之一。 lawnsea非常正確,您應該輸出您測試的所有內容(將其附加到Node下的exports或瀏覽器中的window)。它和任何編程語言一樣,真的。

對於Jasmine和CoffeeScript,特別是與jQuery結合使用時,您應該看看InstantJasmineCoffee項目和this related blog post

+0

博客文章的鏈接是404,現在... – number5 2011-11-09 13:21:46

3

我只是偶然發現了這一點,但如果你正在尋找上手茉莉+ CoffeeScript的就便宜,你可以看看這個骨架末日應用程序,我發佈到Github上。它使用機架過濾器動態編譯CoffeeScript。例如規格&指令包括:https://github.com/searls/jasmine-coffee