我的项目结构是这样的:
├── src
| ├── js
| └── a.js
├── test
| ├── spec
| └── test_a.js
我的 a.js
看起来像这样:
define('A/B/C', function(){
var D = ...
return D;
})
在我的karma.conf.js
中,我在frameworks
中包含了requirejs
,所需的文件包含如下:
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
模块?
我的 test/test-bootstrap.js
中的 require.config
是:
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 加载模块,因为我可能会更改项目结构,并且我不希望模块路径被硬编码到测试文件中。
最佳答案
您必须配置 RequireJS 才能找到您的模块,因为您为其指定的名称与 RequireJS 可以使用的路径不对应。一般来说,不建议在模块中硬编码名称,但如果您确实有充分的理由,那么在 test/test-bootstrap.js
调用 require.config< 的部分中
,你应该有一个像这样的路径
:
paths: {
'A/B/C': 'src/js/a',
// and whatever else you'd need...
}
关于javascript - Karma 如何通过 id 加载模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183642/