playwright-bdd
Version:
BDD Testing with Playwright runner
46 lines (40 loc) • 1.48 kB
text/typescript
/**
* Cucumber message reporter.
* Based on: https://github.com/cucumber/cucumber-js/blob/main/src/formatter/message_formatter.ts
*/
import * as messages from '@cucumber/messages';
import BaseReporter, { InternalOptions } from './base';
import { AttachmentEnvelope } from './messagesBuilder/types';
import { isAttachmentEnvelope } from './attachments/helpers';
import { shouldSkipAttachment, SkipAttachments } from './attachments/skip';
import { toEmbeddedAttachment } from './attachments/external';
type MessageReporterOptions = {
outputFile?: string;
skipAttachments?: SkipAttachments;
};
export default class MessageReporter extends BaseReporter {
constructor(
internalOptions: InternalOptions,
protected userOptions: MessageReporterOptions = {},
) {
super(internalOptions);
this.setOutputStream(this.userOptions.outputFile);
this.eventBroadcaster.on('envelope', (envelope: messages.Envelope) => {
if (isAttachmentEnvelope(envelope)) {
this.handleAttachment(envelope);
} else {
this.writeEnvelope(envelope);
}
});
}
protected handleAttachment(envelope: AttachmentEnvelope) {
if (shouldSkipAttachment(envelope, this.userOptions.skipAttachments)) return;
this.writeEnvelope({
...envelope,
attachment: toEmbeddedAttachment(envelope.attachment),
});
}
protected writeEnvelope(envelope: messages.Envelope) {
this.outputStream.write(JSON.stringify(envelope) + '\n');
}
}