Javascript RequireJS未使用karma和typescript正确加载模块

Javascript RequireJS未使用karma和typescript正确加载模块,javascript,requirejs,typescript,jasmine,karma-runner,Javascript,Requirejs,Typescript,Jasmine,Karma Runner,我正在尝试使用karma/jasmine为SPA设置单元测试 首先,以下测试在karma中运行良好: /// <reference path="../../definitions/jasmine/jasmine.d.ts" /> /// <reference path="../../src/app/domain/core/Collections.ts"/> define(["app/domain/core/Collections"], (collections) =&g

我正在尝试使用karma/jasmine为SPA设置单元测试

首先,以下测试在karma中运行良好:

/// <reference path="../../definitions/jasmine/jasmine.d.ts" />
/// <reference path="../../src/app/domain/core/Collections.ts"/>

define(["app/domain/core/Collections"], (collections) => {

    describe('LinkedList', () => {

        it('should be able to store strings for lookup', () => {
            var list = new collections.Collections.LinkedList<string>();

            list.add("item1");
            expect(list.first()).toBe("item1");
        });
    });
}); 
这编译得很好,我得到了我的类型信息,用于handy intellisense等,但现在karma抛出了一个错误

结果是它试图加载模块而不加载.js后缀,由以下错误消息指示:

There is no timestamp for /base/src/app/domain/core/Collections! 
Failed to load resource: the server responded with a status of 404 (Not Found)
 (http://localhost:9876/base/src/app/domain/core/Collections)
Uncaught Error: Script error for: /base/src/app/domain/core/Collections
我现在就到此为止,但如果它有帮助的话,我很高兴提供我的karma配置文件、test main等等。但我希望有人以前遇到过这个问题,也许能为我指明正确的方向

我的typescript是用AMD标志编译的

结果是它试图在没有.js后缀的情况下加载模块


这可能不是错误的真正来源。实际上,它是在看
/base/src/app/domain/core/Collections
,而不是
app/domain/core/Collections
(就像你手动输入的那样)。注意
base/src/
不应该在那里

这不是打字脚本问题。我们遇到了同样的问题。原来karma“window.\uuuuu karma\uuuu.files”数组包含测试中包含的所有文件,包括.js扩展名

现在,在提供.js扩展时,requireJS不起作用。为了解决这个问题,在我们的main test.js文件中,我们通过过滤所有*Spec.js文件创建了一个变量“tests”,然后根据需要从文件名中删除.js。更多信息请点击此处:

下面是我们是如何做到这一点的(基于上面链接中提供的信息):

main-test.js

console.log('===========================================')
console.log('=================TEST FILES================')


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

console.log('===========================================')
console.log('===========================================')


require.config({
    baseUrl:'/base',
    paths: {
        jquery      :["http://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min", "lib/jquery"],
        angular     : ["https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min", "lib/angular"],
        angularMocks: 'app/vendors/bower_components/angular-mocks/angular-mocks',
    },
    shim: {
        'angularMocks': {
            deps: ['angular'],
            exports: 'angular.mock'
        }
    },
    deps: tests,
    callback: window.__karma__.start
});
另外,请确保您已在karma.config.js文件中提供了要测试的文件,此处有更多详细信息:与上面的链接相同


希望它能有所帮助

如果我从require调用中去掉它,那么typescript编译器将找不到该文件。此外,/base/src/app/domain/core/Collections.js是文件在karma runner服务器上的实际位置,即,将其放入浏览器不会生成404:。那么,为什么这会导致require.js忽略文件的.js后缀呢?
console.log('===========================================')
console.log('=================TEST FILES================')


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

console.log('===========================================')
console.log('===========================================')


require.config({
    baseUrl:'/base',
    paths: {
        jquery      :["http://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min", "lib/jquery"],
        angular     : ["https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min", "lib/angular"],
        angularMocks: 'app/vendors/bower_components/angular-mocks/angular-mocks',
    },
    shim: {
        'angularMocks': {
            deps: ['angular'],
            exports: 'angular.mock'
        }
    },
    deps: tests,
    callback: window.__karma__.start
});