我正在使用茉莉和业力进行单元测试。伊斯坦布尔记者。
我想指定要考虑哪个文件夹进行代码覆盖。 我想排除其他所有内容。
现在我完全不知道配置如何工作。 我要考虑的唯一文件夹是core文件夹。 (必须粘贴屏幕截图,因为防火墙不允许我上传图片)
karma.config:
module.exports = function (config) {
config.set({
basePath: '',
files:['mockData.js', 'mockLocalization.js'],
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
//require('karma-phantomjs-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular/cli/plugins/karma'),
require('karma-scss-preprocessor'),
require('karma-sonarqube-reporter'),
require('karma-junit-reporter'),
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
angularCli: {
environment: 'dev'
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcov', 'cobertura' ],
fixWebpackSourcePaths: true,
},
junitReporter:{
useBrowserName: false,
outputDir: 'report',
// will be resolved to basePath (in the same way as files/exclude patterns)
outputFile: 'karma-report.xml'
},
coverageReporter: {
includeAllSources: false,
dir: 'coverage',
reporters: [
{ type: 'html', subdir: 'html' }
]
},
reporters: ['progress', 'kjhtml','coverage-istanbul'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'], //make sure it is chromeHeadless while running the pipeline otherwise it will fail.
singleRun: true,
browserDisconnectTimeout: 20000,
browserDisconnectTolerance: 3,
browserNoActivityTimeout: 120000,
flags: [
'--disable-web-security',
'--disable-gpu',
'--no-sandbox'
]
});
};
记者:
编辑:
const context = require.context('./core', true, /\.spec\.ts$/);
context.keys().map(context);
但是
const context = require.context('./core', true, /\.spec\.ts$/);
context.keys().map(context);
const context2 = require.context('./modules', true, /\.spec\.ts$/);
context2.keys().map(context2);
礼物:
答案 0 :(得分:1)
在src文件夹中,将test.js配置为仅指向要运行测试的文件夹
// Then we find all the tests.
const context = require.context('./app/folderyouwantoruntestcas', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
答案 1 :(得分:1)
正如@Chellappan指出的那样,该框架在代码覆盖范围中包括一个库。因为它是在我的组件之一中引用的。 我可以通过angular-cli.json中的以下内容将其从代码覆盖率中排除
"test": {
"codeCoverage": {
"exclude": [
"src/assets/jqwidgets/**/*",
"src/assets/jqwidgets-ts/**/*"
]
},
答案 2 :(得分:0)
有一个属性可以将特定文件排除在覆盖范围之外,请参阅以下来自angular.json文件的代码
`"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
...
"codeCoverageExclude": [
"src/app/in-memory-data.service.ts",
"src/test-util/stubs.ts",
"src/testing/**/*"
]
}
}`
“ codeCoverageExclude”属性将排除其中提到的文件。
还请参阅此以获取受支持的参数- https://github.com/angular/angular-cli/blob/v6.0.0-rc.8/packages/%40angular/cli/lib/config/schema.json#L1065-L1267