2011-08-12 65 views
3

使用節點測試客戶端coffeescript/js我有一個web應用程序,客戶端的東西用coffeescript編寫並加載了require.js。我如何使用expresso/jasmine/<other>

我希望能夠使用基於節點的測試運行程序(如expresso)(儘管歡迎其他建議)隔離和測試此類東西,以便我可以將客戶端測試與我們的CI服務器集成 - 目前Team市。

這裏是我的目錄設置:

. 
├── coffee 
│   ├── models 
│   ├── node_modules 
│   │   └── expresso 
│   ├── spec 
│   ├── tests 
│   └── views 
├── static 
│   └── js 
│    ├── lib 
│    ├── models 
│    ├── tests 
│    └── views 

這些迷上了使用require.js像這樣:

deps = [ 
    "lib/backbone", "models/websocket_collection", "/static/js/lib/date.js" 
] 

define(deps, (Backbone, ws) -> 
    # module code and exports here 

並加載到瀏覽器中,像這樣:

<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="my_mod" src="/static/js/my_mod.js"></script> 

在現在的創意世界中,我希望能夠擁有一個如下所示的測試模塊:

{Model1, Model2} = require "models/some_module" 

exports.test_a = -> 
    assert.equal # etc etc 

我有幾個問題(有沒有真正使用節點服務器端除了當我zombie.js飾演)

  1. 如何判斷節點,在我所有的普通的JavaScript依賴關係的(靜態/ JS/lib目錄),其中一些是爲下載,但Backbone.js的已標記了require.js定義的東西,像這樣

    define(function(require, exports, module) { 
        (function(){ 
    
  2. 如何實際運行測試?我試過r.js(這是我的理解應該是之間的瀏覽器端的要求和節點要求的橋樑)

,我發現了問題是:

ReferenceError: define is not defined 

我還試圖要求(「allplugins-require」),這是我加載瀏覽器端收集所有客戶端代碼的腳本,但這似乎違反了節點的要求。

  • 有人這樣做嗎?
  • 如果你不這樣做你如何測試你的代碼(與CI集成的積分)?
  • require.js的任何替代方法可用於管理客戶端依賴關係,這些依賴關係在服務器端可能會更好一些?

我很樂意聽到人們正在使用的替代方法。

感謝, 本

回答

2

我花了很長時間試圖得到這個工作,並最終放棄了。通過引用全局變量中的所有require.js依賴關係並將其用於node.js測試,我確實得到了它的工作,但設計非常難看,我覺得我已經擊敗了這一點。

我目前的做法是:

這對我來說很好,有以下注意事項:

  • 客戶端調試很困難,因爲針腳拼接了我所有的腳本。我發現從針腳配置中省略像jQuery這樣的庫對此有所幫助。
  • 我沒有任何方法來調試服務器端。有一個node.js debugger,但它沒有與最後幾個節點的版本一起工作。
+0

這聽起來是一個不錯的方法......在你前面的全局變量解決方案如何DOD你周圍的定義是不確定的? –

+0

自己定義它。 – liammclennan

3

通過節點are here中的r.js運行requirejs的文檔。特別是,r.js用它自己的替代節點的require。只要npm安裝的模塊對require.js配置不可見,它就可以加載通過npm安裝的僅節點程序包/模塊。

另一個警告是,r.js需要是在節點環境中運行的main.js,即頂級應用程序js文件的兄弟文件。

爲r.js將支持加載requirejs作爲一個節點模塊(如需要(「requirejs」),這將提供更好的整合故事。這種變化將在0.26.0版本中的最新代碼。

+1

謝謝,我正在努力的另一件事是如何在r.js下運行測試?即,r.js被注入到如下命令中:「expresso ./tests」 –

1

好了,過幾天黑客攻擊,現在我已經得到了我的客戶端代碼(一些也無妨)打包爲CommonJS的模塊和茉莉花節點測試。

如果任何人的興趣,我分叉茉莉花節點添加一個與CI服務器集成的xml文件的輸出,這是工作得很好,

我會報告回來後,我縫了一個nd跑步。

這裏是我的叉:https://github.com/boothead/jasmine-node