Best JavaScript code snippet using playwright-internal
workerRunner.js
Source:workerRunner.js
...278 };279 if (reportEvents) this.emit('testBegin', buildTestBeginPayload(testId, testInfo, startWallTime));280 if (testInfo.expectedStatus === 'skipped') {281 testInfo.status = 'skipped';282 if (reportEvents) this.emit('testEnd', buildTestEndPayload(testId, testInfo));283 return;284 } // Update the fixture pool - it may differ between tests, but only in test-scoped fixtures.285 this._fixtureRunner.setPool(test._pool);286 this._currentDeadlineRunner = deadlineRunner = new _util2.DeadlineRunner(this._runTestWithBeforeHooks(test, testInfo), deadline());287 const result = await deadlineRunner.result; // Do not overwrite test failure upon hook timeout.288 if (result.timedOut && testInfo.status === 'passed') testInfo.status = 'timedOut';289 testFinishedCallback();290 if (!result.timedOut) {291 this._currentDeadlineRunner = deadlineRunner = new _util2.DeadlineRunner(this._runAfterHooks(test, testInfo), deadline());292 deadlineRunner.setDeadline(deadline());293 const hooksResult = await deadlineRunner.result; // Do not overwrite test failure upon hook timeout.294 if (hooksResult.timedOut && testInfo.status === 'passed') testInfo.status = 'timedOut';295 } else {296 // A timed-out test gets a full additional timeout to run after hooks.297 const newDeadline = this._deadline();298 this._currentDeadlineRunner = deadlineRunner = new _util2.DeadlineRunner(this._runAfterHooks(test, testInfo), newDeadline);299 await deadlineRunner.result;300 }301 this._currentDeadlineRunner = undefined;302 testInfo.duration = (0, _util2.monotonicTime)() - startTime;303 if (reportEvents) this.emit('testEnd', buildTestEndPayload(testId, testInfo));304 const isFailure = testInfo.status === 'timedOut' || testInfo.status === 'failed' && testInfo.expectedStatus !== 'failed';305 const preserveOutput = this._loader.fullConfig().preserveOutput === 'always' || this._loader.fullConfig().preserveOutput === 'failures-only' && isFailure;306 if (!preserveOutput) await removeFolderAsync(testInfo.outputDir).catch(e => {});307 this._currentTest = null;308 (0, _globals.setCurrentTestInfo)(null);309 if (testInfo.status !== 'passed' && testInfo.status !== 'skipped') {310 if (test._type === 'test') this._failedTestId = testId;else this._fatalError = testInfo.error;311 this.stop();312 }313 }314 async _runBeforeHooks(test, testInfo) {315 try {316 const beforeEachModifiers = [];317 for (let s = test.parent; s; s = s.parent) {318 const modifiers = s._modifiers.filter(modifier => !this._fixtureRunner.dependsOnWorkerFixturesOnly(modifier.fn, modifier.location));319 beforeEachModifiers.push(...modifiers.reverse());320 }321 beforeEachModifiers.reverse();322 for (const modifier of beforeEachModifiers) {323 const result = await this._fixtureRunner.resolveParametersAndRunHookOrTest(modifier.fn, this._workerInfo, testInfo);324 testInfo[modifier.type](!!result, modifier.description);325 }326 await this._runHooks(test.parent, 'beforeEach', testInfo);327 } catch (error) {328 if (error instanceof SkipError) {329 if (testInfo.status === 'passed') testInfo.status = 'skipped';330 } else {331 testInfo.status = 'failed';332 testInfo.error = (0, _util2.serializeError)(error);333 } // Continue running afterEach hooks even after the failure.334 }335 }336 async _runTestWithBeforeHooks(test, testInfo) {337 const completeStep = testInfo._addStep('hook', 'Before Hooks');338 if (test._type === 'test') await this._runBeforeHooks(test, testInfo); // Do not run the test when beforeEach hook fails.339 if (testInfo.status === 'failed' || testInfo.status === 'skipped') {340 completeStep === null || completeStep === void 0 ? void 0 : completeStep(testInfo.error);341 return;342 }343 try {344 await this._fixtureRunner.resolveParametersAndRunHookOrTest(test.fn, this._workerInfo, testInfo, completeStep);345 } catch (error) {346 if (error instanceof SkipError) {347 if (testInfo.status === 'passed') testInfo.status = 'skipped';348 } else {349 // We might fail after the timeout, e.g. due to fixture teardown.350 // Do not overwrite the timeout status.351 if (testInfo.status === 'passed') testInfo.status = 'failed'; // Keep the error even in the case of timeout, if there was no error before.352 if (!('error' in testInfo)) testInfo.error = (0, _util2.serializeError)(error);353 }354 } finally {355 completeStep === null || completeStep === void 0 ? void 0 : completeStep(testInfo.error);356 }357 }358 async _runAfterHooks(test, testInfo) {359 var _completeStep;360 let completeStep;361 let teardownError;362 try {363 completeStep = testInfo._addStep('hook', 'After Hooks');364 if (test._type === 'test') await this._runHooks(test.parent, 'afterEach', testInfo);365 } catch (error) {366 if (!(error instanceof SkipError)) {367 if (testInfo.status === 'passed') testInfo.status = 'failed'; // Do not overwrite test failure error.368 if (!('error' in testInfo)) testInfo.error = (0, _util2.serializeError)(error); // Continue running even after the failure.369 }370 }371 try {372 await this._fixtureRunner.teardownScope('test');373 } catch (error) {374 if (testInfo.status === 'passed') testInfo.status = 'failed'; // Do not overwrite test failure error.375 if (!('error' in testInfo)) {376 testInfo.error = (0, _util2.serializeError)(error);377 teardownError = testInfo.error;378 }379 }380 (_completeStep = completeStep) === null || _completeStep === void 0 ? void 0 : _completeStep(teardownError);381 }382 async _runHooks(suite, type, testInfo) {383 const all = [];384 for (let s = suite; s; s = s.parent) {385 const funcs = s._eachHooks.filter(e => e.type === type).map(e => e.fn);386 all.push(...funcs.reverse());387 }388 if (type === 'beforeEach') all.reverse();389 let error;390 for (const hook of all) {391 try {392 await this._fixtureRunner.resolveParametersAndRunHookOrTest(hook, this._workerInfo, testInfo);393 } catch (e) {394 // Always run all the hooks, and capture the first error.395 error = error || e;396 }397 }398 if (error) throw error;399 }400 _reportDone() {401 const donePayload = {402 failedTestId: this._failedTestId,403 fatalError: this._fatalError404 };405 this.emit('done', donePayload);406 }407}408exports.WorkerRunner = WorkerRunner;409function buildTestBeginPayload(testId, testInfo, startWallTime) {410 return {411 testId,412 workerIndex: testInfo.workerIndex,413 startWallTime414 };415}416function buildTestEndPayload(testId, testInfo) {417 return {418 testId,419 duration: testInfo.duration,420 status: testInfo.status,421 error: testInfo.error,422 expectedStatus: testInfo.expectedStatus,423 annotations: testInfo.annotations,424 timeout: testInfo.timeout,425 attachments: testInfo.attachments.map(a => {426 var _a$body;427 return {428 name: a.name,429 contentType: a.contentType,430 path: a.path,...
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!