【问题标题】:Requirejs do not add ".js" for modules using karmaRequirejs 不为使用业力的模块添加“.js”
【发布时间】:2014-11-01 01:02:08
【问题描述】:

我有一个简单的测试,它必须在 webstorm 中使用 karma 和 requirejs。

问题在于,由于某种原因,requirejs 不会为我为测试加载的模块添加“.js”。所以它在尝试加载“../ts/mamats/mama”时崩溃了,而“../ts/mamats/mama.js”存在

测试(main.jasmine.js):

define(["require", "exports", "../ts/mamats/mama"], function(require, exports, mama) {
    describe("first test", function () {
        it("should be true", function () {
            var object = new mama.block();
            expect(object instanceof mama.block).toBe(true);
        });
    });
});
//# sourceMappingURL=main.jasmine.js.map

当我将“../ts/mamats/mama”替换为“../ts/mamats/mama.js”时,一切正常

sourceMappingURL 在这里,因为 javaScript 文件是从 typeScript 源文件生成的,因此我无法手动为模块添加“.js”

测试从这个入口点(main-test.js)开始:

var tests = Object.keys(window.__karma__.files).filter(function (file) {
    return (/\.jasmine\.js$/).test(file);
});
requirejs.config({
    baseUrl: '/base',
    deps: tests,
    callback: window.__karma__.start
});

为什么 requirejs 不在这里为模块添加“.js”?

Karma 配置文件:

module.exports = function(config) {
  config.set({
    basePath: '../',
    frameworks: ['jasmine', 'requirejs'],
    files: [
      'static-tests/main-test.js',
      { pattern: 'static/**/*', included: false },
      { pattern: 'static-tests/**/*', included: false }
    ],
    exclude: [],
    preprocessors: {},
    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: false,
    browsers: ['Chrome'],
    singleRun: false
  });
};

【问题讨论】:

标签: requirejs typescript karma-runner webstorm karma-jasmine


【解决方案1】:

这里有一篇关于 RequireJs 如何处理这个问题的有趣文章:

http://requirejs.org/docs/api.html#jsfiles

阅读这使得它看起来像是 RequireJS 的一个问题,但对于这是否属实似乎存在一些争论。无论如何,这个gist 似乎解决了这个问题。

var tests = Object.keys(window.__karma__.files).filter(function (file) {
  return /\.spec\.js$/.test(file);
}).map(function(file){
  return file.replace(/^\/base\/src\/js\/|\.js$/g,'');
});

require.config({
  baseUrl: '/base/src/js'
});

require(tests, function(){
  window.__karma__.start();
});

【讨论】:

    【解决方案2】:

    在 require.js 中看起来有问题

    问题在下一个: 1. 在 deps 中出现绝对路径时 - requirejs 停止为任何 require 调用添加“.js” 2.在deps中出现带扩展名的文件时,由于某种原因requirejs再次停止为模块添加“.js”

    此处的其他解决方案 - 替换 BathUrl 并将其添加到 requirejs conf 没有帮助。

    接下来是我的解决方案:

    var tests = Object.keys(window.__karma__.files).filter(function (file) {
        return (/\-jasmine\.js$/).test(file);
    }).map(function (file) {
        return file.replace(/^\/|\.js$/g, '');
    });
    

    baseUrl: '',
    

    对于requirejs.conf

    我不知道为什么 requirejs 仍然为所有请求的 url 添加“/base”,但现在一切正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 2015-07-23
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      相关资源
      最近更新 更多