javascript - Karma 如何通过 id 加载模块?

标签 javascript requirejs karma-runner

我的项目结构是这样的:

├── 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/

相关文章:

javascript - 如何在数组中获取新的空对象

javascript - RequireJS 中依赖关系的相关路径定义

javascript - 将距离字符串转换为数字

javascript - 使用没有 View 模型 .JS 文件的 knockout 组件?

javascript - Angular ng-class 呈现正确的类,但 Karma 显示错误

unit-testing - 在新窗口中运行每个单元测试

karma-runner - 尝试使用 Web Worker 时 Karma 出现 404

javascript - 使用正则表达式和 javascript 将 HTTP url 重写为 HTTPS

javascript - 将 Widget 附加到特定节点

javascript - 单击事件后无法从 url 中删除主题标签