2016-12-28 2 views
1

Я пытаюсь выполнить единичный тест (с помощью Karma + Jasmine + karma-typescript) моего проекта TypeScript. Структура проекта выглядит следующим образом:Reflect.getOwnMetadata не является функцией с karma-typescript

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); 
    }); 
}); 

Но когда я бегу karma start, я получаю

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 

Я предполагаю, что это из-за pollyfill (s), которые/не загружаются в браузере. Тем не менее, у меня есть import ed aurelia-pollyfills в моем файле spec.

Просьба предложить, как это можно исправить.


Обновление: Любых глядя на это ответ, может также столкнуться с проблемами с исходной картой (Error: Could not find source map for:'') от karma-remap-istanbul пытается сгенерировать отчет покрытия.

Один из способов избежать этой проблемы - просто удалить проблематичный плагин-репортер. Например, измените reporters: ['mocha', 'coverage', 'karma-remap-istanbul'] на reporters: ['mocha', 'coverage'].

Другим решением было бы создание исходных карт. В случае, если вы не можете указать то же самое в вашем tsconfig.json, вы можете указать, что в karma.conf.js если вы используете karma-typescript:

karmaTypescriptConfig: { 
    tsconfig: "./tsconfig.json", 
    compilerOptions: { 
    sourceMap: true 
    } 
} 

Наконец, я закончил с reporters: ["mocha", "karma-typescript"], как это показывает, какой тест пройден, и которые не удалось , а также сформировать отчет о покрытии.

ответ

2

Вы, вероятно, с отсутствующим reflect-metadata импорт:

$ НПМ установить --save-DEV-метаданные отражают

Затем добавьте следующую строку в ваш files:

files: [ 
    { pattern: "node_modules/reflect-metadata/Reflect.js", include: true }, 
    { pattern: "src/*.ts", include: true }, 
    { pattern: "tests/**/*Spec.ts", include: true } 
] 
+0

Thank вы за свой ответ. Кажется, что это работает, поскольку эта ошибка ушла сейчас (но сталкивается с другими, связанными с sourcemap, игнорируя ее, используя 'журналисты: ['mocha', 'coverage'],'). Однако я хотел бы понять, почему мы должны явно включать этот файл, поскольку я уже импортировал его в свой файл spec. Полагаете, он не связан по умолчанию? –

+1

Метаданные отражения предназначены для использования в глобальном масштабе, поэтому необходимо импортировать в качестве глобального –

Смежные вопросы