Я пытаюсь выполнить единичный тест (с помощью 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"]
, как это показывает, какой тест пройден, и которые не удалось , а также сформировать отчет о покрытии.
Thank вы за свой ответ. Кажется, что это работает, поскольку эта ошибка ушла сейчас (но сталкивается с другими, связанными с sourcemap, игнорируя ее, используя 'журналисты: ['mocha', 'coverage'],'). Однако я хотел бы понять, почему мы должны явно включать этот файл, поскольку я уже импортировал его в свой файл spec. Полагаете, он не связан по умолчанию? –
Метаданные отражения предназначены для использования в глобальном масштабе, поэтому необходимо импортировать в качестве глобального –