UNPKG

@serenity-js/cucumber

Version:

Serenity/JS test runner adapter for seamless integration with any version of Cucumber.js, facilitating BDD-style test automation and leveraging Serenity/JS reporting capabilities

65 lines 3.38 kB
"use strict"; const messages_1 = require("@cucumber/messages"); const events_1 = require("@serenity-js/core/lib/events"); const model_1 = require("@serenity-js/core/lib/model"); const CucumberMessagesParser_1 = require("./parser/CucumberMessagesParser"); module.exports = function (serenity, moduleLoader) { const { Formatter, formatterHelpers } = moduleLoader.require('@cucumber/cucumber'), TestCaseHookDefinition = moduleLoader.require('@cucumber/cucumber/lib/models/test_case_hook_definition').default; return class CucumberMessagesListener extends Formatter { static fakeInternalAfterHookUri = '/internal/serenity-js/cucumber'; parser; log; supportCodeLibrary; constructor(options) { super(options); this.parser = new CucumberMessagesParser_1.CucumberMessagesParser(serenity, formatterHelpers, options, (step) => step?.actionLocation?.uri !== CucumberMessagesListener.fakeInternalAfterHookUri); this.supportCodeLibrary = this.supportCodeLibrary ?? options.supportCodeLibrary; this.addAfterHook(() => { this.emit(new events_1.SceneFinishes(serenity.currentSceneId(), serenity.currentTime())); return serenity.waitForNextCue(); }); options.eventBroadcaster.on('envelope', (envelope) => { // this.log('> [cucumber] ' + JSON.stringify(envelope) + '\n'); switch (true) { case !!envelope.testRunStarted: return this.emit(new events_1.TestRunStarts(serenity.currentTime())); case !!envelope.testCaseStarted: return this.emit(this.parser.parseTestCaseStarted(envelope.testCaseStarted)); case !!envelope.testStepStarted: return this.emit(this.parser.parseTestStepStarted(envelope.testStepStarted)); case !!envelope.testStepFinished: return this.emit(this.parser.parseTestStepFinished(envelope.testStepFinished)); case !!envelope.testCaseFinished: return this.emit(this.parser.parseTestCaseFinished(envelope.testCaseFinished)); } }); } async finished() { this.emit(new events_1.TestRunFinishes(serenity.currentTime())); try { await serenity.waitForNextCue(); this.emit(new events_1.TestRunFinished(new model_1.ExecutionSuccessful(), serenity.currentTime())); } catch (error) { this.emit(new events_1.TestRunFinished(new model_1.ExecutionFailedWithError(error), serenity.currentTime())); throw error; } finally { await super.finished(); } } addAfterHook(code) { this.supportCodeLibrary.afterTestCaseHookDefinitions.unshift(new TestCaseHookDefinition({ code, id: messages_1.IdGenerator.uuid()(), line: 0, uri: CucumberMessagesListener.fakeInternalAfterHookUri, options: {}, })); } emit(events) { [].concat(events).forEach(event => serenity.announce(event)); } }; }; //# sourceMappingURL=CucumberMessagesListener.js.map