npm.io
4.0.0 • Published 1 month ago

@cucumber/pretty-formatter

Licence
MIT
Version
4.0.0
Deps
2
Size
253 kB
Vulns
0
Weekly
0
Stars
4


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

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.

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:

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.

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.

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:

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<Record<TestStepResultStatus, Style>>
        icon?: Partial<Record<TestStepResultStatus, string>>
        progress?: Partial<Record<TestStepResultStatus, string>>
    }
    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 or an array of them.

See the default theme for a good example. It's exported as CUCUMBER_THEME, so you can clone and extend it if you'd like.