pretty-formatter

Rich formatting of Cucumber progress and results for the terminal

Latest version on npm Build status

![Example output of the pretty formatting, showing the different colors used](../screenshots/all-statuses.cucumber.pretty.png) ## Usage This package is used internally in `@cucumber/cucumber` to provide the `summary`, `progress` and `pretty` formatters; you don't need to install or manage it yourself. For usage, see https://github.com/cucumber/cucumber-js/blob/main/docs/formatters.md. You can use these low-level classes to provide formatting for a different implementation of Cucumber. ### SummaryPrinter Prints a summary of test results including non-passing scenarios, statistics, and snippets. ```typescript import { SummaryPrinter } from '@cucumber/pretty-formatter' const printer = new SummaryPrinter() // each time a message is emitted printer.update(envelope) ``` Can also be used to summarise a test run that already happened, with a pre-populated `Query` object: ```typescript import { Query } from '@cucumber/query' import { SummaryPrinter } from '@cucumber/pretty-formatter' const query = new Query() // each time a message is emitted query.update(envelope) // later SummaryPrinter.summarise(query) ``` ### ProgressPrinter Prints test progress as single-character status indicators. ```typescript import { ProgressPrinter } from '@cucumber/pretty-formatter' const printer = new ProgressPrinter() // each time a message is emitted printer.update(envelope) ``` ### PrettyPrinter Prints test progress in a prettified Gherkin-style format. ```typescript import { PrettyPrinter } from '@cucumber/pretty-formatter' const printer = new PrettyPrinter() // each time a message is emitted printer.update(envelope) ``` ### Themes Here's the schema for a theme: ```ts interface Theme { attachment?: Style dataTable?: { all?: Style border?: Style content?: Style } docString?: { all?: Style content?: Style delimiter?: Style mediaType?: Style } feature?: { all?: Style keyword?: Style name?: Style } location?: Style rule?: { all?: Style keyword?: Style name?: Style } scenario?: { all?: Style keyword?: Style name?: Style } status?: { all?: Partial> icon?: Partial> progress?: Partial> } step?: { argument?: Style keyword?: Style text?: Style } tag?: Style symbol?: { bullet?: string } } enum TestStepResultStatus { UNKNOWN = "UNKNOWN", PASSED = "PASSED", SKIPPED = "SKIPPED", PENDING = "PENDING", UNDEFINED = "UNDEFINED", AMBIGUOUS = "AMBIGUOUS", FAILED = "FAILED" } ``` `Style` is any [Node.js supported modifier](https://nodejs.org/api/util.html#modifiers) or an array of them. See the [default theme](./src/theme.ts) for a good example. It's exported as `CUCUMBER_THEME`, so you can clone and extend it if you'd like.