angular - 合并来自两个 Angular 项目的 Karma 测试结果
问题描述
我有一个包含角度测试的主要角度项目。在这里面我有一个“共享”模块,它实际上是一个 BitBucket 子模块,它有自己的业力测试。每当我ng test
在主项目客户端应用程序文件夹上运行命令时,都会启动来自两个“项目”的测试,但结果会被覆盖(大项目会覆盖子模块,反之亦然)有没有办法将结果附加到相同的结果中 -文件?
此外,对于我使用 JUnit Reporter 的主项目,这是我在主项目中的 karma.config 文件:
const puppeteer = require('puppeteer');
process.env.CHROME_BIN = puppeteer.executablePath();
module.exports = function (config) {
config.set({
customLaunchers: {
X: {
base: 'ChromeHeadless',
flags: [
'--headless',
'--no-sandbox',
]
}
},
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('karma-scss-preprocessor'),
require('@angular-devkit/build-angular/plugins/karma'),
require('karma-junit-reporter'),
],
client: {
jasmine: {
random: false,
timeoutInterval: 10000
}
},
proxies: {
'/assets/': 'src/assets/'
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../coverage'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
junitReporter: {
outputDir: '', // results will be saved as $outputDir/$browserName.x ml
outputFile: 'karma-results.xml', // if included, results will be saved as $outputDir/$browserName/$outputFile
suite: '', // suite will become the package name attribute in xml testsuite element
useBrowserName: false, // add browser name to report and classes names
nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element
classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element
properties: {}, // key value pair of properties to add to the <properties> section of the report
xmlVersion: null // use '1' if reporting to be per SonarQube 6.2 XML format
},
trxReporter: {
outputFile: 'test-results.trx',
shortTestName: false
},
reporters: ['junit'],
port: 9876,
colors: true,
logLevel: config.LOG_WARN,
usePolling: false,
autoWatch: false,
browsers: ['X'],
captureTimeout: 6000000,//it was already there
browserDisconnectTimeout: 1000000,
browserDisconnectTolerance: 1,
browserNoActivityTimeout: 6000000,
singleRun: true
});
};
第二个项目的 Karma 配置是:
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_DISABLE,
autoWatch: true,
browsers: ['ChromeHeadless'],
captureTimeout: 6000000, // it was already there
browserDisconnectTimeout: 1000000,
browserDisconnectTolerance: 1,
browserNoActivityTimeout: 6000000,
singleRun: true
});
};
我不明白的是第二个项目如何知道在与第一个项目相同的文件上输出并覆盖主项目的内容?
还有 tsconfig.spec.json 文件:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}
我假设所有的 spec.ts 文件都包含在这里(包括第二个项目,考虑到它的路径:ClientApp\libs\SecondProject ....)
提前致谢
解决方案
您需要一个包含设置的主 karma.conf.js 文件和一个用于每个项目的文件。在您的情况下,扩展主 karama.conf.js 文件的 2 个附加 karma.conf.js 文件。
请参阅下面的示例并检查属性 coverageIstanbulReporter 以设置输出文件夹 karma.conf.js
const { join } = require('path');
const { constants } = require('karma');
module.exports = () => {
return {
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
jasmine: {
random: false
},
coverageIstanbulReporter: {
dir: join(__dirname, '../../coverage'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: constants.LOG_INFO,
autoWatch: true,
browsers: ['ChromeHeadlessNoSandbox'],
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
executablePath: '/usr/bin/chromium-browser',
flags: [
'--no-sandbox',
'--disable-dev-shm-usage',
'--remote-debugging-port=9222'
]
}
},
singleRun: true
};
};
项目的 karma.conf.js:
const { join } = require('path');
const getBaseKarmaConfig = require('../../karma.conf');
module.exports = function (config) {
const baseConfig = getBaseKarmaConfig();
config.set({
...baseConfig,
coverageIstanbulReporter: {
...baseConfig.coverageIstanbulReporter,
dir: join(__dirname, '../../coverage/apps/project-A'),
},
});
};
推荐阅读
- java - 无法使用我的 procfile 更改编码
- angular6 - matTextareaAutosize 在 Angular Material 6.4.2 中不起作用
- vba - 如何使用 VBA 删除 word 文档中的空白页?
- java - 使用 throw 语句实现 try-catch 块
- c++ - Boost Spirit QI :在替代函数内具有序列的元组上的自动规则推导
- docker - 我可以告诉 dockerfile 将文件写入主机吗?
- vue.js - Vue.js 2 过滤器不适用于数据表
- vuejs2 - 如何将方法动态添加到 Vue 组件
- c - 当 EPOLLHUP 看起来足够时,为什么我们还需要 EPOLLRDHUP?
- reactjs - 没有路由匹配时如何重定向?