javascript - Reflect.getOwnMetadata er ikke en funksjon med karma-typescript
Jeg prøver å enhetsteste (med Karma + Jasmine + karma-typescript) mitt TypeScript-prosjekt. Prosjektstrukturen er som følger:
root
|- src/*.ts //all TypeScript source files
|- tests/unit/*.spec.ts //all spec (test) files
|- karma.conf.js
|- tsconfig.json
Min karma.conf.js ser slik ut:
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
})
}
Min spesifikasjonsfil ser slik ut:
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);
});
});
Men når jeg kjører karma start, får jeg
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
Jeg antar at det er fordi polyfill(s) ikke blir lastet inn i nettleseren. Jeg har imidlertid importet aurelia-polyfills i spesifikasjonsfilen min.
Vennligst foreslå hvordan dette kan rettes.
Oppdatering: Alle som ser på dette for svar, kan også møte problemer med sourcemap (Error: Could not find source map for:'') fra karma-remap-istanbul når de prøver å generere dekningsrapport.
En måte å unngå dette problemet på er rett og slett å fjerne den problematiske reporter-pluginen. For eksempel, endre reporters: ['mocha', 'coverage', 'karma-remap-istanbul'] til reporters: ['mocha', 'coverage'].
En annen løsning ville være å generere kildekartene. Hvis du ikke kan spesifisere det samme i din tsconfig.json, kan du spesifisere det i karma.conf.js hvis du bruker karma-typescript:
karmaTypescriptConfig: {
tsconfig: "./tsconfig.json",
compilerOptions: {
sourceMap: true
}
}
Til slutt endte jeg opp med reporters: ["mocha", "karma-typescript"], da det viser hvilke tester som besto og hvilke som feilet, i tillegg til å generere en dekningsrapport.
Svar #1
Du mangler sannsynligvis reflect-metadata-importen:
$npm install --save-dev reflect-metadata
Legg deretter til følgende i dine filer:
files: [
{ pattern: "node_modules/reflect-metadata/Reflect.js", include: true },
{ pattern: "src/*.ts", include: true },
{ pattern: "tests/**/*Spec.ts", include: true }
]
