mirror of
https://github.com/dorny/test-reporter.git
synced 2025-12-17 14:57:09 +01:00
feat: consider the workdir in pytest annotations
This commit is contained in:
parent
7442569c25
commit
0d3dd791da
3 changed files with 40 additions and 3 deletions
|
|
@ -4,6 +4,7 @@ import * as path from 'path'
|
||||||
import {PytestJunitParser} from '../src/parsers/pytest-junit/pytest-junit-parser'
|
import {PytestJunitParser} from '../src/parsers/pytest-junit/pytest-junit-parser'
|
||||||
import {ParseOptions} from '../src/test-parser'
|
import {ParseOptions} from '../src/test-parser'
|
||||||
import {normalizeFilePath} from '../src/utils/path-utils'
|
import {normalizeFilePath} from '../src/utils/path-utils'
|
||||||
|
import {getAnnotations} from '../src/report/get-annotations'
|
||||||
|
|
||||||
describe('pytest-junit tests', () => {
|
describe('pytest-junit tests', () => {
|
||||||
it('test with one successful test', async () => {
|
it('test with one successful test', async () => {
|
||||||
|
|
@ -29,7 +30,8 @@ describe('pytest-junit tests', () => {
|
||||||
|
|
||||||
const opts: ParseOptions = {
|
const opts: ParseOptions = {
|
||||||
parseErrors: true,
|
parseErrors: true,
|
||||||
trackedFiles: []
|
workDir: 'mnt/extra-addons',
|
||||||
|
trackedFiles: ['mnt/extra-addons/product_changes/tests/first_test.py']
|
||||||
}
|
}
|
||||||
|
|
||||||
const parser = new PytestJunitParser(opts)
|
const parser = new PytestJunitParser(opts)
|
||||||
|
|
@ -40,5 +42,9 @@ describe('pytest-junit tests', () => {
|
||||||
line: 6,
|
line: 6,
|
||||||
message: 'assert False'
|
message: 'assert False'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const annotations = getAnnotations([result], 1)
|
||||||
|
expect(annotations.length).toBe(1)
|
||||||
|
expect(annotations[0].path).toBe('product_changes/tests/first_test.py')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
15
dist/index.js
generated
vendored
15
dist/index.js
generated
vendored
|
|
@ -1415,6 +1415,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.PytestJunitParser = void 0;
|
exports.PytestJunitParser = void 0;
|
||||||
const xml2js_1 = __nccwpck_require__(6189);
|
const xml2js_1 = __nccwpck_require__(6189);
|
||||||
const test_results_1 = __nccwpck_require__(2768);
|
const test_results_1 = __nccwpck_require__(2768);
|
||||||
|
const path_utils_1 = __nccwpck_require__(4070);
|
||||||
class PytestJunitParser {
|
class PytestJunitParser {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
|
|
@ -1493,13 +1494,25 @@ class PytestJunitParser {
|
||||||
const line = Number.parseInt(pos);
|
const line = Number.parseInt(pos);
|
||||||
if (path && Number.isFinite(line)) {
|
if (path && Number.isFinite(line)) {
|
||||||
return {
|
return {
|
||||||
path,
|
path: this.getRelativePath(path),
|
||||||
line,
|
line,
|
||||||
message: lines[1]
|
message: lines[1]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
getRelativePath(path) {
|
||||||
|
path = (0, path_utils_1.normalizeFilePath)(path);
|
||||||
|
const workDir = this.getWorkDir(path);
|
||||||
|
if (workDir !== undefined && path.startsWith(workDir)) {
|
||||||
|
path = path.substring(workDir.length + 1);
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
getWorkDir(path) {
|
||||||
|
var _a, _b;
|
||||||
|
return ((_b = (_a = this.options.workDir) !== null && _a !== void 0 ? _a : this.assumedWorkDir) !== null && _b !== void 0 ? _b : (this.assumedWorkDir = (0, path_utils_1.getBasePath)(path, this.options.trackedFiles)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
exports.PytestJunitParser = PytestJunitParser;
|
exports.PytestJunitParser = PytestJunitParser;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import {
|
||||||
TestCaseResult,
|
TestCaseResult,
|
||||||
TestCaseError
|
TestCaseError
|
||||||
} from '../../test-results'
|
} from '../../test-results'
|
||||||
|
import {getBasePath, normalizeFilePath} from '../../utils/path-utils'
|
||||||
|
|
||||||
export class PytestJunitParser implements TestParser {
|
export class PytestJunitParser implements TestParser {
|
||||||
assumedWorkDir: string | undefined
|
assumedWorkDir: string | undefined
|
||||||
|
|
@ -102,7 +103,7 @@ export class PytestJunitParser implements TestParser {
|
||||||
|
|
||||||
if (path && Number.isFinite(line)) {
|
if (path && Number.isFinite(line)) {
|
||||||
return {
|
return {
|
||||||
path,
|
path: this.getRelativePath(path),
|
||||||
line,
|
line,
|
||||||
message: lines[1]
|
message: lines[1]
|
||||||
}
|
}
|
||||||
|
|
@ -110,4 +111,21 @@ export class PytestJunitParser implements TestParser {
|
||||||
|
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getRelativePath(path: string): string {
|
||||||
|
path = normalizeFilePath(path)
|
||||||
|
const workDir = this.getWorkDir(path)
|
||||||
|
if (workDir !== undefined && path.startsWith(workDir)) {
|
||||||
|
path = path.substring(workDir.length + 1)
|
||||||
|
}
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
|
||||||
|
private getWorkDir(path: string): string | undefined {
|
||||||
|
return (
|
||||||
|
this.options.workDir ??
|
||||||
|
this.assumedWorkDir ??
|
||||||
|
(this.assumedWorkDir = getBasePath(path, this.options.trackedFiles))
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue