2012-06-28 33 views
3

我有一個init文件,提供了一個函數,通過require.config()引導RequireJS。配置最終看起來像這樣(大部分):如何使用jasmine-node配置RequireJS(require.config())?

... 

config = 
    baseUrl: sysDir + 'lib/' 
    paths: 
     app: appDir + 'lib/' 
     dep: sysDir + 'vendor/' 
    deps: [ 
     'dep/underscore/underscore.min' 
     'dep/jquery/jquery.min' 
    ] 

require.config config 

此文件在瀏覽器中使用,我也想在節點中使用它。我試圖在幫手中做同樣的事情,但我沒有太多的運氣。由於規範在新的VM環境中運行的方式,我不確定要做什麼,並且沒有明顯的方法將茉莉花節點傳遞給您的RequireJS配置。

任何想法?

回答

1

我這有點通過將需要配置成spec_helper.js在我的規格的根目錄下工作:

如果
define = require('requirejs'); 

(function() { 
    var baseUrl = __dirname + '/../smoke' 
    console.log('Configuring requirejs with baseurl: ' + baseUrl) 

    define.config({ 
     'nodeRequire': global.require, 
     'baseUrl': baseUrl 
    }); 
})(); 

不知道這將真正解決您的問題或沒有。

+0

正如我所說我已經嘗試過,它不工作,因爲每個規範正在運行在一個新的VM上下文。 – Xavura

0

茉莉節點提供requirejs一個樣本項目:https://github.com/mhevery/jasmine-node#requirejs

,如果你打電話給你測試,如> jasmine-node --runWithRequireJs --requireJsSetup tests/requirejs-setup.js tests,你可以在requirejs-設置添加配置設置 - 文件。

不過我的baseUrl設置有問題。在requirejs - 包裝 - template.js的的baseUrl的操作及相對於當前執行的測試文件,你可以在這裏看到設置:

if(alteredConfig.baseUrl){ 
    var base = baseUrl.replace(/\\/g, '/'), 
     splitUrl = alteredConfig.baseUrl.replace(/\\/g, '/').split('/'), 
     index = 0; 

    for(; index < splitUrl.length; index++){ 
     if(splitUrl[index] === '..') { 
      base = path.dirname(base); 
     } else { 
      base += '/' + splitUrl[index]; 
     } 
    } 

    alteredConfig.baseUrl = base; 
} 

這導致從我requirejs配置定義的路徑問題。所以我簡單地評論了這個代碼塊。現在對我來說效果很好。