Working warning annotation on expect
This commit is contained in:
parent
5028fb6270
commit
d3836e9c33
|
|
@ -381,8 +381,22 @@ class ExpectMetaInfoProxyHandler implements ProxyHandler<any> {
|
||||||
setMatcherCallContext({ expectInfo: this._info, testInfo, step: step.info });
|
setMatcherCallContext({ expectInfo: this._info, testInfo, step: step.info });
|
||||||
const callback = () => matcher.call(target, ...args);
|
const callback = () => matcher.call(target, ...args);
|
||||||
const result = zones.run('stepZone', step, callback);
|
const result = zones.run('stepZone', step, callback);
|
||||||
if (result instanceof Promise)
|
if (result instanceof Promise) {
|
||||||
return result.then(finalizer).catch(reportStepError);
|
const promise = result.then(finalizer).catch(reportStepError);
|
||||||
|
|
||||||
|
testInfo?.unusedAsyncApiCalls.add(promise);
|
||||||
|
|
||||||
|
const oldThen = promise.then;
|
||||||
|
promise.then = ((...args: any[]) => {
|
||||||
|
if (args[0] !== undefined) {
|
||||||
|
// onfulfilled callback
|
||||||
|
testInfo?.unusedAsyncApiCalls.delete(promise);
|
||||||
|
}
|
||||||
|
return oldThen.call(promise, ...args);
|
||||||
|
}) as any;
|
||||||
|
|
||||||
|
return promise;
|
||||||
|
}
|
||||||
finalizer();
|
finalizer();
|
||||||
return result;
|
return result;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ export class TestInfoImpl implements TestInfo {
|
||||||
duration: number = 0;
|
duration: number = 0;
|
||||||
readonly annotations: Annotation[] = [];
|
readonly annotations: Annotation[] = [];
|
||||||
readonly attachments: TestInfo['attachments'] = [];
|
readonly attachments: TestInfo['attachments'] = [];
|
||||||
|
readonly unusedAsyncApiCalls: Set<Promise<any>> = new Set();
|
||||||
status: TestStatus = 'passed';
|
status: TestStatus = 'passed';
|
||||||
snapshotSuffix: string = '';
|
snapshotSuffix: string = '';
|
||||||
readonly outputDir: string;
|
readonly outputDir: string;
|
||||||
|
|
|
||||||
|
|
@ -369,6 +369,9 @@ export class WorkerMain extends ProcessRunner {
|
||||||
// Now run the test itself.
|
// Now run the test itself.
|
||||||
const fn = test.fn; // Extract a variable to get a better stack trace ("myTest" vs "TestCase.myTest [as fn]").
|
const fn = test.fn; // Extract a variable to get a better stack trace ("myTest" vs "TestCase.myTest [as fn]").
|
||||||
await fn(testFunctionParams, testInfo);
|
await fn(testFunctionParams, testInfo);
|
||||||
|
// Create warning if any of the async calls were not awaited.
|
||||||
|
if (testInfo.unusedAsyncApiCalls.size > 0)
|
||||||
|
testInfo.annotations.push({ type: 'warning', description: 'Some async calls were not awaited by the end of the test. This can cause flakiness.' });
|
||||||
});
|
});
|
||||||
}).catch(() => {}); // Ignore the top-level error, it is already inside TestInfo.errors.
|
}).catch(() => {}); // Ignore the top-level error, it is already inside TestInfo.errors.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue