UNPKG

@gmangiapelo/wdio-azure-devops-service

Version:

Wdio Service to inject result of automatic test run in Azure DevOps TestPlan

79 lines (78 loc) 2.7 kB
import { AzureTestPlanReporter } from '@gmangiapelo/azuredevops-test-reporter'; export default class AzureDevopsService { _options; _azureReporter; constructor(_options) { this._options = _options; _options = Object.assign(_options, { stdout: true }); this._azureReporter = new AzureTestPlanReporter(this._options); } async onPrepare() { await this._azureReporter.init(); await this._azureReporter.starTestRun(); } async onComplete() { await this._azureReporter.stopTestRun(); } async afterTest(test, context, result) { let caseId = this.parseCaseIDString(test.parent); if (caseId == 'notDefined') { caseId = this.parseCaseIDString(test.title); if (caseId == 'notDefined') { return new Promise((resolve) => { resolve(); }); } } const testResult = { testCaseId: caseId, result: result.passed ? 'Passed' : 'Failed', message: '', // pass a substring of result.error }; await this._azureReporter.init(); const runId = await this._azureReporter.getCurrentTestRunId(); await this._azureReporter.sendTestResult(testResult, runId); } async afterScenario(world, result) { const caseId = this.parseCaseID(world.pickle.tags); if (caseId == 'notDefined') { return new Promise((resolve) => { resolve(); }); } const testResult = { testCaseId: caseId, result: result.passed ? 'Passed' : 'Failed', message: result.error || '', }; await this._azureReporter.init(); const runId = await this._azureReporter.getCurrentTestRunId(); await this._azureReporter.sendTestResult(testResult, runId); } parseCaseID(pickleTags) { const caseID = 'notDefined'; let patt = /@?[cC](\d+)/g; if (this._options.caseIdRegex) { patt = new RegExp(this._options.caseIdRegex, 'g'); } for (const tag of pickleTags) { const matchInfo = patt.exec(tag.name); if (matchInfo != null) { return matchInfo[1]; } } return caseID; } parseCaseIDString(title) { const caseID = 'notDefined'; let patt = /@?[cC](\d+)/g; if (this._options.caseIdRegex) { patt = new RegExp(this._options.caseIdRegex, 'g'); } const matchInfo = patt.exec(title); if (matchInfo != null) { return matchInfo[1]; } return caseID; } }