首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reflect.getOwnMetadata不是一个带有业力类型记录的函数。

Reflect.getOwnMetadata不是一个带有业力类型记录的函数。
EN

Stack Overflow用户
提问于 2016-12-28 16:01:03
回答 1查看 5.5K关注 0票数 3

我正在尝试单元测试(用Karma + Jasmine + 因果报应)我的TypeScript项目。项目结构如下:

代码语言:javascript
复制
root
|- src/*.ts              //all TypeScript source files
|- tests/unit/*.spec.ts  //all spec (test) files
|- karma.conf.js
|- tsconfig.json

我的karma.conf.js如下所示:

代码语言:javascript
复制
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
  })
}

我的规范文件如下所示:

代码语言:javascript
复制
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);
    });
});

但是当我运行karma start

代码语言:javascript
复制
Chrome 55.0.2883 (Windows 10 0.0.0) ERROR
  Uncaught TypeError: Reflect.getOwnMetadata is not a function
  at C:/Users/spal/AppData/Local/Temp/karma-typescript-bundle-16376WqjdFvsYtjdI.js:2325

我认为,这是因为polly填充是/没有在浏览器中加载。但是,我的规范文件中有imported aurelia-pollyfills

请建议如何纠正这一问题。

更新:任何人看到这个问题的答案,也可能面临来自karma-remap-istanbul的源地图(Error: Could not find source map for:'')的问题,试图生成覆盖率报告。

避免这个问题的一种方法就是简单地删除有问题的记者插件。例如,将reporters: ['mocha', 'coverage', 'karma-remap-istanbul']更改为reporters: ['mocha', 'coverage']

其他解决方案是生成源映射。如果不能在tsconfig.json中指定相同的内容,则可以在karma.conf.js中指定这一点,如果使用的是karma-typescript

代码语言:javascript
复制
karmaTypescriptConfig: {
  tsconfig: "./tsconfig.json",
  compilerOptions: {
    sourceMap: true
  }
}

最后,我得到了reporters: ["mocha", "karma-typescript"],因为它显示了哪些测试通过了,哪些测试失败了,并生成了一个覆盖报告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-28 16:07:23

您可能缺少了reflect-metadata导入:

$ npm安装-保存-开发反映-元数据

然后将以下内容添加到files

代码语言:javascript
复制
files: [
    { pattern: "node_modules/reflect-metadata/Reflect.js", include: true },
    { pattern: "src/*.ts", include: true },
    { pattern: "tests/**/*Spec.ts", include: true }
]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41365597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档