Грант, Стамбул, Испарта и TypeScript
TL;DR
Кто-нибудь использовал Grunt и Jasmine для успешного создания отчетов о покрытии?
Длинная история:
У меня есть несколько тестов, написанных на жасмине, для которых я хотел сгенерировать некоторую информацию о покрытии. Для того, чтобы быть универсальным, я фактически использовал grunt-istanbul, который позволяет инструктору (как испарта) обрабатывать мой код, после чего генерируется отчет. Этот отчет, однако, основан на переданном коде (таким образом в JavaScript).
Затем я наткнулся на переопределение istanbul, которое просматривает файлы карт, сгенерированные компилятором TypeScript, и вместо этого основывает результаты на этом; тем не менее, мой инструктор добавляет некоторый код в передаваемый код, что означает, что мои файлы карт больше не совпадают. По крайней мере, это то, что я предполагаю, как говорит istanbul-remap:
Ошибка: не удалось найти исходную карту для: "src/server/modules/service.js"
Это часть моей ворчливой конфигурации:
instrument: {
files: 'src/server/**/*.js',
options: {
lazy: false,
basePath: '.',
babel: {
sourceMap: true
},
instrumenter: require('isparta').Instrumenter
}
},
storeCoverage: {
options: {
dir: 'coverage/reports-server/'
}
},
remapIstanbul: {
dist: {
options: {
reports: {
"html": "./coverage/lcov-report",
"json": "./coverage/coverage.json"
}
},
src: "./coverage/reports-server/coverage.json"
}
},
1 ответ
На самом деле, я смог понять это сам. Хитрость здесь заключается в следующем:
- компилировать код с картой
- скопировать код во временную папку
- код инструмента
- выполнять тесты
- скопировать код обратно из временного местоположения
- создать отчет
Это может показаться неуклюжим, но это делает свое дело! В моем файле grunt я добавил задачи копирования, чтобы автоматизировать эти временные копии для меня.
В итоге я получаю правильный и надежный результат.