Я все время читал статьи об этом, пытаясь правильно настроить мою среду. Но почему-то я не понимаю. Моя настройка -
/app
... source (mixed js and ts)
/scripts
... copied source (js)
typescripts.js // transpiled typescript with inline mapping
Тесты выполняются нормально, и с отображением отладки в хром-отладчике отображается правильно. Но Стамбул видит файл typescripts.js
как один файл вместо конкатенации десятков других файлов.
Чтобы сгенерировать источник typescript, я использую gulp-typescript
. Источник (исключая тесты) передается в вышеупомянутый typescripts.js
, и тесты передаются индивидуально и копируются в /scripts
.
var ts = require('gulp-typescript');
var sourcemaps = require('gulp-sourcemaps');
var concat = require('gulp-concat');
module.exports = function (gulp, config) {
'use strict';
// Runs dot ts files found in `www` through the typescript compiler and copies them as js
// files to the scripts directory
gulp.task('typescript', ['typescript:tests'], function () {
return gulp.src(config.paths.typescript) // [ './www/app/**/*.ts', '!./www/app/**/*.test.ts', '!./www/app/**/*.mock.ts' ]
.pipe(sourcemaps.init())
.pipe(ts(ts.createProject(config.paths.tsConfig))) // './tsconfig.json'
.js
.pipe(concat(config.sourcemaps.dest)) // typescripts.js
.pipe(sourcemaps.write(config.sourcemaps)) // { includeContent: false, sourceRoot: '/app' } - i've also tried absolute local path
.pipe(gulp.dest(config.paths.tmpScripts)); // ./www/scripts
});
gulp.task('typescript:tests', [], function() {
return gulp.src(config.paths.typescriptTests) // [ './www/app/**/*.test.ts', './www/app/**/*.mock.ts' ]
.pipe(ts(ts.createProject(config.paths.tsConfig))) // './tsconfig.json'
.pipe(gulp.dest(config.paths.tmpScripts)); // ./www/scripts
});
};
Результирующий typescripts.js
имеет встроенную исходную карту. С исходной картой, около десятка файлов ts приводит к 106kb.
Итак, отсюда отлично работают тесты и отладка.
Теперь, пытаясь правильно обработать покрытие в Стамбуле, я установил karma-sourcemap-loader
и добавил его в препроцессоры.
preprocessors: {
'www/scripts/typescripts.js': ['sourcemap'],
'www/scripts/**/*.js': ['coverage']
},
Я бы подумал, что это то, что мне нужно делать. Но он не показывает покрытие кода в исходных файлах. Я пробовал абсолютный путь от C:/
, но это тоже не сработало. Я также попробовал различные опции в gulp-sourcemaps
, например, добавить источник (который переместил файл на 160kb), но не понравился.
Кто-нибудь получил это на работу? Любые идеи, что я могу делать неправильно?