我努力爲我的打字稿/ mocha/gulp項目獲得適當的nyc/istanbul報道。我嘗試了一些方法,其中一些似乎無法使用源地圖,而其他因爲ts-node
/tsc
錯誤而失敗。我目前的設置是:獲得nyc /伊斯坦布爾的覆蓋面報告與打字稿一起工作
nyc
相關配置在package.json
"scripts": {
"test:coverage": "nyc npm run test:unit",
"test:unit": "gulp mocha"
}
"nyc": {
"check-coverage": true,
"all": true,
"extension": [
".js",
".jsx",
".ts",
".tsx"
],
"include": [
"src/**/!(*.test.*).[tj]s?(x)"
],
"reporter": [
"html",
"lcov",
"text",
"text-summary"
],
"report-dir": "docs/reports/coverage"
}
gulpfile.js
mocha
相關部分
const SRC_DIR = path.join(__dirname, 'src');
const SRC_FILES = path.join(SRC_DIR, '**', '*.[jt]s?(x)');
const TEST_FILES = path.join(SRC_DIR, '**', '*.test.[jt]s?(x)');
const MOCHA_CONFIG = {
src: [
TEST_FILES
],
watchSrc: [
SRC_FILES,
TEST_FILES
],
mocha: {
// compilers: [
// 'ts:ts-node/register',
// 'tsx:ts-node/register'
// ],
require: [
'./tests/setup.js',
'ignore-styles',
'source-map-support/register'
]
}
};
gulp.task('mocha', mocha(MOCHA_CONFIG));
tsconfig.json
{
"compilerOptions": {
"baseUrl": "./",
"rootDir": "./src",
"outDir": "./build",
"allowJs": true,
"module": "commonjs",
"target": "es5",
"lib": ["es5", "es6", "dom"],
"sourceMap": true,
"inlineSourceMap": false,
"inlineSources": false,
"experimentalDecorators": true,
"noUnusedParameters": true,
"noUnusedLocals": true,
"jsx": "react",
"moduleResolution": "node"
},
"exclude": [
"docs",
"tests",
"**/*.test.js",
"**/*.test.jsx",
"**/*.test.ts",
"**/*.test.tsx",
"tools",
"gulpfile.js",
"node_modules",
"build",
"typings/main",
"typings/main.d.ts"
],
"awesomeTypescriptLoaderOptions": {
"useCache": true,
"useBabel": true
}
}
通過以上的設置覆蓋produc es結果的所有文件,但它們對TS文件不正確很可能是由於未使用源地圖(即,報告顯示沒有覆蓋的行是評論和數字似乎也是錯誤的)。
擁有一批變種的辦法嘗試沒有成功的最常用的建議之一是增加"require": ["ts-node/register"]
到nyc
配置但隨後遇到錯誤抱怨即gulpfile.js
,docs/reports/coverage/lcov-report/prettify.js
和一些其他的JS文件是not under 'rootDir'
哪些是正確的,但它不清楚爲什麼ts-node
試圖處理所有文件中的src
,即使它們被排除在tsconfig.json
(仍然配置變得非常複雜)。
我會很感激任何建議,哪些方式去獲得適當的覆蓋率報告TS文件。
使用覆蓋設置正確的測試有時會很麻煩。我停止使用Mocha/Istanbul作爲React-Typescript項目,並切換到Jest和ts-jest(https://github.com/kulshekhar/ts-jest),它隨伊斯坦布爾要求提供,以及React測試所需的所有好東西。這對我來說是一個跨越不同版本的穩定堆棧。 –
感謝您的建議!雖然實際上這是我的考慮之一,我是否對它可能需要重寫,因爲'jest'不同於'mocha'? – ciekawy
摩卡測試很容易被改寫成笑話。刪除描述部分並將其更改()爲test()。這些斷言也是不同的。但之前*和之後*部分是相同的。需要一段時間,但是長時間... –