2016-05-12 94 views
0

我的項目結構是這樣的:Karma如何通過id加載模塊?

├── src 
| ├── js 
|  └── a.js 
├── test 
| ├── spec 
|  └── test_a.js 

a.js看起來是這樣的:

define('A/B/C', function(){ 
    var D = ... 
    return D; 
}) 

在我karma.conf.js,我有包括frameworksrequirejs,和所需文件包括以下幾個方面:

files: [ 
     {pattern: 'src/js/*.js', included: false}, 
     {pattern: 'test/spec/*.js', included: false}, 
     'test/test-bootstrap.js' 
     ] 

而我的test_a.js看起來像:

define(['A/B/C'], function(D){ 
    //test case 
}) 

但瀏覽器的外觀爲localhost:9876/base/A/B/C.js因爲只有localhost:9876/base/src/js/a.js在瀏覽器中存在返回一個錯誤。

我的問題是,既然src/js/a.js已經加載了,我在karma.conf.js中引入了requirejs,爲什麼模塊不能加載它的id呢?我以錯誤的方式編寫了A/B/C模塊嗎?

require.configtest/test-bootstrap.js是:

require.config({ 
// Karma serves files under /base, which is the basePath from your config file 
baseUrl: 'http://localhost:9876/base', 
paths: { 
    'jquery': 'test/lib/jquery-1.12.0.min' 
}, 

// dynamically load all test files 
deps: allTestFiles, 

// we have to kickoff jasmine, as it is asynchronous 
callback: window.__karma__.start 
}); 

我需要通過其ID加載模塊,因爲我可以改變我的項目結構,我不想要的模塊路徑是硬編碼到測試文件。

回答

1

您必須配置RequireJS才能找到您的模塊,因爲您給它的名稱與RequireJS可以使用的路徑不相符。在一般情況下,這是不可取的硬編碼名稱的模塊,但如果你有一個很好的理由,那麼在test/test-bootstrap.js調用require.config的一部分,你應該有一個paths這樣的:

paths: { 
    'A/B/C': 'src/js/a', 
    // and whatever else you'd need... 
} 
+0

謝謝您的回答,實際上我有'test/test-bootstrap.js',它的功能與你的'test-main.js'相同。但在我看來,如果我給一個模塊一個ID,我可以直接使用它,而無需爲它配置路徑。我錯了嗎? – JasmineOT

+0

如果您正在演示,RequireJS無法找到您的模塊,而無需在配置中指定它。 – Louis

+0

是的,我添加路徑後,它的作品。我想我應該讀更多關於'requirejs'。 – JasmineOT