Javascript Reflect.getOwnMetadata不是带有karma typescript的函数
我正在尝试单元测试(使用Karma+Jasmine+)我的打字脚本项目。项目结构如下:Javascript Reflect.getOwnMetadata不是带有karma typescript的函数,javascript,typescript,karma-runner,karma-jasmine,aurelia,Javascript,Typescript,Karma Runner,Karma Jasmine,Aurelia,我正在尝试单元测试(使用Karma+Jasmine+)我的打字脚本项目。项目结构如下: root |- src/*.ts //all TypeScript source files |- tests/unit/*.spec.ts //all spec (test) files |- karma.conf.js |- tsconfig.json 我的karma.conf.js如下所示: module.exports = function (config) { co
root
|- src/*.ts //all TypeScript source files
|- tests/unit/*.spec.ts //all spec (test) files
|- karma.conf.js
|- tsconfig.json
我的karma.conf.js
如下所示:
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', "karma-typescript"],
karmaTypescriptConfig: {
tsconfig: "./tsconfig.json"
},
files: [
'src/*.ts',
'tests/**/*Spec.ts'
],
exclude: [],
preprocessors: {
"**/*.ts": ["karma-typescript"]
},
reporters: ["progress", "karma-typescript"],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
concurrency: Infinity
})
}
我的等级库文件如下所示:
import 'aurelia-polyfills'; //<- importing this, as the project have dependency on Aurelia
// import "babel-polyfill";
import "reflect-metadata";
import "jasmine";
import { Utility } from './../../src/Utility';
describe("this is a try to set up karma-jasmine-webpack test (TS)", () => {
it("utility_test", () => {
const result = Utility.doSomething();
const expected = Expected_Result;
expect(result).toEqual(expected);
});
});
我假设这是因为浏览器中没有加载pollyfill。但是,我的spec文件中有import
edaurelia pollyfills
请建议如何更正此问题
更新:任何查看此答案的人,都可能会面临来自
karma remap istanbul
的源地图问题(错误:找不到:“”
)试图生成覆盖率报告
避免此问题的一种方法是简单地删除有问题的reporter插件。例如,将记者:['mocha','coverage','karma remap伊斯坦布尔]
更改为记者:['mocha','coverage']
另一个解决方案是生成源地图。如果您不能在tsconfig.json
中指定相同的内容,您可以在karma.conf.js
中指定,如果您正在使用karma-typescript
:
karmaTypescriptConfig: {
tsconfig: "./tsconfig.json",
compilerOptions: {
sourceMap: true
}
}
最后,我采访了
记者:[“mocha”,“karma typescript”]
,它显示了哪些测试通过了,哪些测试失败了,并生成了一份报道报告 您可能缺少反映元数据
导入:
$npm安装--保存开发人员反映元数据
然后将以下内容添加到文件中:
files: [
{ pattern: "node_modules/reflect-metadata/Reflect.js", include: true },
{ pattern: "src/*.ts", include: true },
{ pattern: "tests/**/*Spec.ts", include: true }
]
谢谢你的回答。它似乎起作用了,因为这个错误现在已经消失了(但是面对与sourcemap相关的其他问题;通过使用记者:['mocha','coverage'],
忽略它)。但是,我想理解,为什么我们需要显式地包含该文件,因为我已经在spec文件中导入了相同的文件。猜测它在默认情况下没有绑定?反射元数据设计用于全局,这就是为什么需要作为全局导入的原因
files: [
{ pattern: "node_modules/reflect-metadata/Reflect.js", include: true },
{ pattern: "src/*.ts", include: true },
{ pattern: "tests/**/*Spec.ts", include: true }
]