Skip to content

Commit 28e8d23

Browse files
authored
feat(concatjs): enable junit report for karma_web_test (#2630)
This PR enables junit reports for karma_web_test, by adding karma-junit-reporter as a peer dependency and adding an appropriate configuration that works with bazel. karma-junit-reporter is now a peer dependency of @bazel/concatjs
1 parent 8b36ebe commit 28e8d23

File tree

17 files changed

+230
-0
lines changed

17 files changed

+230
-0
lines changed

examples/angular/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"karma-chrome-launcher": "2.2.0",
6060
"karma-firefox-launcher": "1.1.0",
6161
"karma-jasmine": "2.0.1",
62+
"karma-junit-reporter": "2.0.1",
6263
"karma-requirejs": "1.1.0",
6364
"karma-sourcemap-loader": "0.3.7",
6465
"protractor": "^5.4.2",

examples/angular/yarn.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4511,6 +4511,14 @@ [email protected]:
45114511
dependencies:
45124512
jasmine-core "^3.3"
45134513

4514+
4515+
version "2.0.1"
4516+
resolved "https://registry.yarnpkg.com/karma-junit-reporter/-/karma-junit-reporter-2.0.1.tgz#d34eef7f0b2fd064e0896954e8851a90cf14c8f3"
4517+
integrity sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw==
4518+
dependencies:
4519+
path-is-absolute "^1.0.0"
4520+
xmlbuilder "12.0.0"
4521+
45144522
45154523
version "1.1.0"
45164524
resolved "https://registry.yarnpkg.com/karma-requirejs/-/karma-requirejs-1.1.0.tgz#fddae2cb87d7ebc16fb0222893564d7fee578798"
@@ -7421,6 +7429,11 @@ xml2js@^0.4.17:
74217429
sax ">=0.6.0"
74227430
xmlbuilder "~11.0.0"
74237431

7432+
7433+
version "12.0.0"
7434+
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-12.0.0.tgz#e2ed675e06834a089ddfb84db96e2c2b03f78c1a"
7435+
integrity sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==
7436+
74247437
xmlbuilder@~11.0.0:
74257438
version "11.0.1"
74267439
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"

examples/web_testing/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"karma-chrome-launcher": "2.2.0",
99
"karma-firefox-launcher": "1.1.0",
1010
"karma-jasmine": "2.0.1",
11+
"karma-junit-reporter": "2.0.1",
1112
"karma-json-result-reporter": "1.0.0",
1213
"karma-requirejs": "1.1.0",
1314
"karma-sourcemap-loader": "0.3.7",

examples/web_testing/yarn.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,14 @@ [email protected]:
11001100
dependencies:
11011101
fun-map "^3.3.1"
11021102

1103+
1104+
version "2.0.1"
1105+
resolved "https://registry.yarnpkg.com/karma-junit-reporter/-/karma-junit-reporter-2.0.1.tgz#d34eef7f0b2fd064e0896954e8851a90cf14c8f3"
1106+
integrity sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw==
1107+
dependencies:
1108+
path-is-absolute "^1.0.0"
1109+
xmlbuilder "12.0.0"
1110+
11031111
11041112
version "1.1.0"
11051113
resolved "https://registry.yarnpkg.com/karma-requirejs/-/karma-requirejs-1.1.0.tgz#fddae2cb87d7ebc16fb0222893564d7fee578798"
@@ -2101,6 +2109,11 @@ ws@~3.3.1:
21012109
safe-buffer "~5.1.0"
21022110
ultron "~1.1.0"
21032111

2112+
2113+
version "12.0.0"
2114+
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-12.0.0.tgz#e2ed675e06834a089ddfb84db96e2c2b03f78c1a"
2115+
integrity sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==
2116+
21042117
xmlhttprequest-ssl@~1.5.4:
21052118
version "1.5.5"
21062119
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"karma-chrome-launcher": "3.1.0",
5858
"karma-firefox-launcher": "2.1.0",
5959
"karma-jasmine": "4.0.1",
60+
"karma-junit-reporter": "^2.0.1",
6061
"karma-requirejs": "1.1.0",
6162
"karma-sourcemap-loader": "0.3.8",
6263
"lit-element": "^2.2.1",

packages/concatjs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"karma-chrome-launcher": ">=2.0.0",
2727
"karma-firefox-launcher": ">=1.0.0",
2828
"karma-jasmine": ">=2.0.0",
29+
"karma-junit-reporter": ">=2.0.0",
2930
"karma-requirejs": ">=1.0.0",
3031
"karma-sourcemap-loader": ">=0.3.0"
3132
},

packages/concatjs/web_test/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ nodejs_binary(
2828
"@npm//karma-chrome-launcher",
2929
"@npm//karma-firefox-launcher",
3030
"@npm//karma-jasmine",
31+
"@npm//karma-junit-reporter",
3132
"@npm//karma-requirejs",
3233
"@npm//karma-sourcemap-loader",
3334
"@npm//requirejs",

packages/concatjs/web_test/karma.conf.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,25 @@ try {
122122
conf[name] = value;
123123
}
124124

125+
/**
126+
* Helper function to override nested karma config values.
127+
*/
128+
function overrideNestedConfigValue(conf, name, value) {
129+
const nameParts = name.split('.');
130+
const finalName = nameParts.pop();
131+
for (const property of nameParts) {
132+
if (!(property in conf)) {
133+
conf[property] = {};
134+
}
135+
conf = conf[property];
136+
}
137+
if (conf.hasOwnProperty(name)) {
138+
console.warn(
139+
`Your karma configuration specifies '${name}' which will be overwritten by Bazel`);
140+
}
141+
conf[finalName] = value;
142+
}
143+
125144
/**
126145
* Helper function to merge base karma config values that are arrays.
127146
*/
@@ -136,6 +155,18 @@ try {
136155
})
137156
}
138157

158+
function tryRequire(packageName) {
159+
try {
160+
return require(packageName);
161+
} catch (e) {
162+
if (e && e.code === 'MODULE_NOT_FOUND') {
163+
return undefined;
164+
}
165+
166+
throw e;
167+
}
168+
}
169+
139170
/**
140171
* Configuration settings for karma under Bazel common to karma_web_test
141172
* and karma_web_test_suite.
@@ -208,6 +239,23 @@ try {
208239
} else {
209240
conf.client = {requireJsShowNoTimestampsError};
210241
}
242+
243+
// Enable the junit reporter if the XML_OUTPUT_FILE environment variable
244+
// is defined and the karma-junit-reporter package is installed.
245+
// The configuration for the junit reporter will be created or overridden
246+
// with the configuration required for bazel to work properly.
247+
const testOutputFile = process.env.XML_OUTPUT_FILE;
248+
const karmaJunitReporterPlugin = testOutputFile ? tryRequire('karma-junit-reporter') : undefined;
249+
if (karmaJunitReporterPlugin) {
250+
mergeConfigArray(conf, 'plugins', [
251+
karmaJunitReporterPlugin,
252+
]);
253+
254+
mergeConfigArray(conf, 'reporters', ['junit']);
255+
overrideNestedConfigValue(conf, 'junitReporter.outputDir', path.dirname(testOutputFile));
256+
overrideNestedConfigValue(conf, 'junitReporter.outputFile', path.basename(testOutputFile));
257+
overrideNestedConfigValue(conf, 'junitReporter.useBrowserName', false);
258+
}
211259
}
212260

213261
/**

packages/concatjs/web_test/test/karma/BUILD.bazel

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ karma_web_test_suite(
2121
srcs = glob(
2222
["*.js"],
2323
exclude = [
24+
"coverage_source_uncovered.js",
25+
"coverage_source.js",
26+
"coverage.spec.js",
2427
"unnamed-amd-module.js",
2528
"init-test.js",
2629
],
@@ -45,6 +48,20 @@ karma_web_test_suite(
4548
],
4649
)
4750

51+
karma_web_test_suite(
52+
name = "coverage_test",
53+
srcs = [
54+
"coverage.spec.js",
55+
"coverage_source.js",
56+
"coverage_source_uncovered.js",
57+
],
58+
browsers = [
59+
"@io_bazel_rules_webtesting//browsers:chromium-local",
60+
"@io_bazel_rules_webtesting//browsers:firefox-local",
61+
],
62+
tags = ["native"],
63+
)
64+
4865
custom_browser(
4966
name = "custom_chrome",
5067
browser = "@io_bazel_rules_webtesting//browsers:chromium-local",
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
(function(factory) {
2+
if (typeof module === 'object' && typeof module.exports === 'object') {
3+
var v = factory(require, exports);
4+
if (v !== undefined) module.exports = v;
5+
} else if (typeof define === 'function' && define.amd) {
6+
define(
7+
'build_bazel_rules_nodejs/packages/concatjs/web_test/test/karma/coverage.spec',
8+
[
9+
'require', 'exports',
10+
'build_bazel_rules_nodejs/packages/concatjs/web_test/test/karma/coverage_source'
11+
],
12+
factory);
13+
}
14+
})(function(require, exports) {
15+
'use strict';
16+
Object.defineProperty(exports, '__esModule', {value: true});
17+
var coverage_source_1 =
18+
require('build_bazel_rules_nodejs/packages/concatjs/web_test/test/karma/coverage_source');
19+
describe('coverage function', () => {
20+
it('should cover one branch', () => {
21+
expect(coverage_source_1.isString(2)).toBe(false);
22+
});
23+
it('should cover the other branch', () => {
24+
expect(coverage_source_1.isString('some string')).toBe(true);
25+
});
26+
});
27+
});

0 commit comments

Comments
 (0)