mirror of
https://github.com/dorny/test-reporter.git
synced 2025-12-16 06:17:10 +01:00
Improve test error messages from flutter
For some reason the error message from flutter SDK might contain no useful information. Basically it just says that test failed and you should see the logs. Logs itself are provided as content of `print` event. This commit adds special processing for this behavior - it parses actual error message out of print event.
This commit is contained in:
parent
2c87efac07
commit
ea36be4653
4 changed files with 37 additions and 6 deletions
|
|
@ -160,8 +160,11 @@ The test description was:
|
||||||
pass updateShouldNotify
|
pass updateShouldNotify
|
||||||
════════════════════════════════════════════════════════════════════════════════════════════════════",
|
════════════════════════════════════════════════════════════════════════════════════════════════════",
|
||||||
"line": 112,
|
"line": 112,
|
||||||
"message": "Test failed. See exception logs above.
|
"message": "The following TestFailure object was thrown running a test:
|
||||||
The test description was: pass updateShouldNotify",
|
Expected: <2>
|
||||||
|
Actual: <1>
|
||||||
|
Unexpected number of calls
|
||||||
|
",
|
||||||
"path": "test/value_listenable_provider_test.dart",
|
"path": "test/value_listenable_provider_test.dart",
|
||||||
},
|
},
|
||||||
"name": "pass updateShouldNotify",
|
"name": "pass updateShouldNotify",
|
||||||
|
|
|
||||||
17
dist/index.js
generated
vendored
17
dist/index.js
generated
vendored
|
|
@ -512,14 +512,14 @@ class DartJsonParser {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
const { trackedFiles } = this.options;
|
const { trackedFiles } = this.options;
|
||||||
const message = (_b = (_a = test.error) === null || _a === void 0 ? void 0 : _a.error) !== null && _b !== void 0 ? _b : '';
|
const stackTrace = (_b = (_a = test.error) === null || _a === void 0 ? void 0 : _a.stackTrace) !== null && _b !== void 0 ? _b : '';
|
||||||
const stackTrace = (_d = (_c = test.error) === null || _c === void 0 ? void 0 : _c.stackTrace) !== null && _d !== void 0 ? _d : '';
|
|
||||||
const print = test.print
|
const print = test.print
|
||||||
.filter(p => p.messageType === 'print')
|
.filter(p => p.messageType === 'print')
|
||||||
.map(p => p.message)
|
.map(p => p.message)
|
||||||
.join('\n');
|
.join('\n');
|
||||||
const details = [print, stackTrace].filter(str => str !== '').join('\n');
|
const details = [print, stackTrace].filter(str => str !== '').join('\n');
|
||||||
const src = this.exceptionThrowSource(details, trackedFiles);
|
const src = this.exceptionThrowSource(details, trackedFiles);
|
||||||
|
const message = this.getErrorMessage((_d = (_c = test.error) === null || _c === void 0 ? void 0 : _c.error) !== null && _d !== void 0 ? _d : '', print);
|
||||||
let path;
|
let path;
|
||||||
let line;
|
let line;
|
||||||
if (src !== undefined) {
|
if (src !== undefined) {
|
||||||
|
|
@ -540,6 +540,19 @@ class DartJsonParser {
|
||||||
details
|
details
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
getErrorMessage(message, print) {
|
||||||
|
if (this.sdk === 'flutter') {
|
||||||
|
const uselessMessageRe = /^Test failed\. See exception logs above\.\nThe test description was:/m;
|
||||||
|
const flutterPrintRe = /^══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═+\s+(.*)\s+When the exception was thrown, this was the stack:/ms;
|
||||||
|
if (uselessMessageRe.test(message)) {
|
||||||
|
const match = print.match(flutterPrintRe);
|
||||||
|
if (match !== null) {
|
||||||
|
return match[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return message || print;
|
||||||
|
}
|
||||||
exceptionThrowSource(ex, trackedFiles) {
|
exceptionThrowSource(ex, trackedFiles) {
|
||||||
const lines = ex.split(/\r?\n/g);
|
const lines = ex.split(/\r?\n/g);
|
||||||
// regexp to extract file path and line number from stack trace
|
// regexp to extract file path and line number from stack trace
|
||||||
|
|
|
||||||
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
|
|
@ -161,7 +161,6 @@ export class DartJsonParser implements TestParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
const {trackedFiles} = this.options
|
const {trackedFiles} = this.options
|
||||||
const message = test.error?.error ?? ''
|
|
||||||
const stackTrace = test.error?.stackTrace ?? ''
|
const stackTrace = test.error?.stackTrace ?? ''
|
||||||
const print = test.print
|
const print = test.print
|
||||||
.filter(p => p.messageType === 'print')
|
.filter(p => p.messageType === 'print')
|
||||||
|
|
@ -169,6 +168,7 @@ export class DartJsonParser implements TestParser {
|
||||||
.join('\n')
|
.join('\n')
|
||||||
const details = [print, stackTrace].filter(str => str !== '').join('\n')
|
const details = [print, stackTrace].filter(str => str !== '').join('\n')
|
||||||
const src = this.exceptionThrowSource(details, trackedFiles)
|
const src = this.exceptionThrowSource(details, trackedFiles)
|
||||||
|
const message = this.getErrorMessage(test.error?.error ?? '', print)
|
||||||
let path
|
let path
|
||||||
let line
|
let line
|
||||||
|
|
||||||
|
|
@ -191,6 +191,21 @@ export class DartJsonParser implements TestParser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getErrorMessage(message: string, print: string): string {
|
||||||
|
if (this.sdk === 'flutter') {
|
||||||
|
const uselessMessageRe = /^Test failed\. See exception logs above\.\nThe test description was:/m
|
||||||
|
const flutterPrintRe = /^══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═+\s+(.*)\s+When the exception was thrown, this was the stack:/ms
|
||||||
|
if (uselessMessageRe.test(message)) {
|
||||||
|
const match = print.match(flutterPrintRe)
|
||||||
|
if (match !== null) {
|
||||||
|
return match[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return message || print
|
||||||
|
}
|
||||||
|
|
||||||
private exceptionThrowSource(ex: string, trackedFiles: string[]): {path: string; line: number} | undefined {
|
private exceptionThrowSource(ex: string, trackedFiles: string[]): {path: string; line: number} | undefined {
|
||||||
const lines = ex.split(/\r?\n/g)
|
const lines = ex.split(/\r?\n/g)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue