2016-05-12 56 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