javascript – RequireJS没有使用karma和typescript正确加载模块
作者:互联网
我正在尝试使用karma / jasmine设置SPA的单元测试
首先,以下测试在业力中运行良好:
/// <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");
});
});
});
但是,集合是anyso类型,我不能将它用于类型声明,因此我在编写测试时缺少intellisense等等.不好!
当我尝试将测试重新编写为更友好的TypeScript格式时出现问题:
/// <reference path="../../definitions/jasmine/jasmine.d.ts" />
/// <reference path="../../src/app/domain/core/Collections.ts"/>
import c = require("./../../src/app/domain/core/Collections");
describe('LinkedList', () => {
it('should be able to store strings for lookup', () => {
var list: c.Collections.LinkedList<string> = new c.Collections.LinkedList<string>();
list.add("item1");
expect(list.first()).toBe("item1");
});
});
编译得很好,我得到了我的类型信息,方便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
我现在要停在这里,但是如果有帮助我很乐意提供我的业力配置文件,test-main等等.但我希望有人之前遇到过这个问题,并且可能能够指出我正确的方向.
我的打字稿用AMD标志编译.
解决方法:
它不是TypeScript问题.我们遇到了同样的问题.事实证明,业力“window .__ karma __.files”数组包括测试中包含的所有文件,包括.js扩展.
现在,在提供.js扩展名时,requireJS不起作用.要修复它,在我们的main-test.js文件中,我们通过过滤所有* Spec.js文件创建了一个变量“tests”,然后我们从文件名中删除了.js,因为requireJS需要它.更多信息:http://karma-runner.github.io/0.8/plus/RequireJS.html
以下是我们如何做到的(基于上面链接中提供的信息):
主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文件中提供了要测试的文件,更多详细信息:http://karma-runner.github.io/0.8/plus/RequireJS.html与上面的链接相同.
希望能帮助到你
标签:javascript,typescript,requirejs,jasmine,karma-runner 来源: https://codeday.me/bug/20190703/1363145.html