gpt4 book ai didi

javascript - RequireJS 没有使用 karma 和 typescript 正确加载模块

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:37 26 4
gpt4 key购买 nike

我正在尝试使用 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");
});
});
});

但是,collectionsany 类型,所以我不能将它用于类型声明,因此我在编写测试时缺少智能感知和诸如此类的东西。不好!<​​/p>

当我尝试将测试重新编写为对 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");
});
});

这编译得很好,我得到了方便的智能感知等的类型信息,但现在 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 标志编译的。

最佳答案

这不是 TypeScript 问题。我们遇到了同样的问题。结果是 karma "window.__karma__.files"数组包含测试中包含的所有文件,包括 .js 扩展名。

现在 requireJS 在提供 .js 扩展名时不起作用。为了修复它,在我们的 ma​​in-test.js 文件中,我们通过过滤所有 *Spec.js 文件创建了一个变量“tests”,然后我们删除 >.js 来自 requireJS 需要的文件名。更多信息:http://karma-runner.github.io/0.8/plus/RequireJS.html

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

主测试.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 - RequireJS 没有使用 karma 和 typescript 正确加载模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com