Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Reflect.getOwnMetadata不是带有karma typescript的函数_Javascript_Typescript_Karma Runner_Karma Jasmine_Aurelia - Fatal编程技术网

Javascript Reflect.getOwnMetadata不是带有karma typescript的函数

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

我正在尝试单元测试(使用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) {
  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
ed
aurelia 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 }
]