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!!
