mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[jest/junit] fix junit reporter (#32686)
Fixes https://github.com/elastic/kibana/issues/32619 With #31825 the reporter contract changed slightly and this updates our custom reporter to fix our junit reports.
This commit is contained in:
parent
10d27eacbb
commit
5f6ff8b4c2
4 changed files with 133 additions and 3 deletions
14
src/dev/jest/integration_tests/__fixtures__/package.json
Normal file
14
src/dev/jest/integration_tests/__fixtures__/package.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"name": "fixture",
|
||||
"jest": {
|
||||
"testMatch": [
|
||||
"**/test.js"
|
||||
],
|
||||
"transform": {
|
||||
"^.+\\.js$": "<rootDir>/../../babel_transform.js"
|
||||
},
|
||||
"reporters": [
|
||||
["<rootDir>/../../junit_reporter.js", {"rootDirectory": "."}]
|
||||
]
|
||||
}
|
||||
}
|
22
src/dev/jest/integration_tests/__fixtures__/test.js
Normal file
22
src/dev/jest/integration_tests/__fixtures__/test.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch B.V. under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch B.V. licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
it('fails', () => {
|
||||
throw new Error('failure');
|
||||
});
|
94
src/dev/jest/integration_tests/junit_reporter.test.js
Normal file
94
src/dev/jest/integration_tests/junit_reporter.test.js
Normal file
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch B.V. under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch B.V. licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import { resolve } from 'path';
|
||||
import { promisify } from 'util';
|
||||
import { readFileSync } from 'fs';
|
||||
|
||||
import del from 'del';
|
||||
import execa from 'execa';
|
||||
import xml2js from 'xml2js';
|
||||
|
||||
const MINUTE = 1000 * 60;
|
||||
const ROOT_DIR = resolve(__dirname, '../../../../');
|
||||
const FIXTURE_DIR = resolve(__dirname, '__fixtures__');
|
||||
const TARGET_DIR = resolve(FIXTURE_DIR, 'target');
|
||||
const XML_PATH = resolve(TARGET_DIR, 'junit/TEST-Jest Tests.xml');
|
||||
|
||||
afterAll(async () => {
|
||||
await del(TARGET_DIR);
|
||||
});
|
||||
|
||||
const parseXml = promisify(xml2js.parseString);
|
||||
|
||||
it(
|
||||
'produces a valid junit report for failures',
|
||||
async () => {
|
||||
const result = await execa(
|
||||
process.execPath,
|
||||
['-r', require.resolve('../../../setup_node_env'), require.resolve('jest/bin/jest')],
|
||||
{
|
||||
cwd: FIXTURE_DIR,
|
||||
env: {
|
||||
CI: 'true',
|
||||
},
|
||||
reject: false,
|
||||
}
|
||||
);
|
||||
|
||||
expect(result.code).toBe(1);
|
||||
await expect(parseXml(readFileSync(XML_PATH, 'utf8'))).resolves.toEqual({
|
||||
testsuites: {
|
||||
$: {
|
||||
name: 'jest',
|
||||
skipped: '0',
|
||||
tests: '1',
|
||||
time: expect.anything(),
|
||||
timestamp: expect.anything(),
|
||||
},
|
||||
testsuite: [
|
||||
{
|
||||
$: {
|
||||
failures: '1',
|
||||
file: resolve(ROOT_DIR, 'src/dev/jest/integration_tests/__fixtures__/test.js'),
|
||||
name: 'test.js',
|
||||
skipped: '0',
|
||||
tests: '1',
|
||||
time: expect.anything(),
|
||||
timestamp: expect.anything(),
|
||||
},
|
||||
testcase: [
|
||||
{
|
||||
$: {
|
||||
classname: 'Jest Tests.·',
|
||||
name: 'fails',
|
||||
time: expect.anything()
|
||||
},
|
||||
failure: [
|
||||
expect.stringMatching(/Error: failure\s+at /m)
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
},
|
||||
3 * MINUTE
|
||||
);
|
|
@ -39,7 +39,7 @@ export default class JestJUnitReporter {
|
|||
} = options;
|
||||
|
||||
this._reportName = reportName;
|
||||
this._rootDirectory = rootDirectory;
|
||||
this._rootDirectory = resolve(rootDirectory);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -70,7 +70,7 @@ export default class JestJUnitReporter {
|
|||
timestamp: msToIso(results.startTime),
|
||||
time: msToSec(Date.now() - results.startTime),
|
||||
tests: results.numTotalTests,
|
||||
failures: results.numFailedTests,
|
||||
failures: results.numFailingTests,
|
||||
skipped: results.numPendingTests,
|
||||
});
|
||||
|
||||
|
@ -81,7 +81,7 @@ export default class JestJUnitReporter {
|
|||
timestamp: msToIso(suite.perfStats.start),
|
||||
time: msToSec(suite.perfStats.end - suite.perfStats.start),
|
||||
tests: suite.testResults.length,
|
||||
failures: suite.numFailedTests,
|
||||
failures: suite.numFailingTests,
|
||||
skipped: suite.numPendingTests,
|
||||
file: suite.testFilePath
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue