# @autometa/cucumber

> **Full Documentation/Getting Started can be [found here](https://bendat.github.io/autometa/docs/bdd/cucumber/intro/)**

Latest version **0.0.3** (published 2022-09-19) · 0 weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install @autometa/cucumber
pnpm add @autometa/cucumber
yarn add @autometa/cucumber
bun add @autometa/cucumber
```

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 0.0.3 |
| Published | 2022-09-19 |
| First published | 2022-09-19 |
| Weekly downloads | 0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 9 |
| Unpacked size | 121.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | benah |
| Keywords | jest, cucumber, automation, gherkin, bdd, testing |

## Links

- npm: https://www.npmjs.com/package/@autometa/cucumber
- Repository: https://github.com/Bendat/autometa
- Homepage: https://bendat.github.io/autometa/docs/bdd/cucumber/intro
- Issues: https://github.com/Bendat/autometa/issues
- npm.io page: https://npm.io/package/@autometa/cucumber

## Dependencies (9)

- [tsyringe](https://npm.io/package/tsyringe.md) ^4.7.0
- [reflect-metadata](https://npm.io/package/reflect-metadata.md) ^0.1.13
- [@autometa/logging](https://npm.io/package/@autometa/logging.md) 0.0.1
- [@cucumber/gherkin](https://npm.io/package/@cucumber/gherkin.md) ^24.0.0
- [@cucumber/messages](https://npm.io/package/@cucumber/messages.md) ^19.1.2
- [project-root-directory](https://npm.io/package/project-root-directory.md) ^1.0.3
- [@autometa/shared-utilities](https://npm.io/package/@autometa/shared-utilities.md) 0.0.1
- [@autometa/dependency-injection](https://npm.io/package/@autometa/dependency-injection.md) 0.0.1
- [@cucumber/cucumber-expressions](https://npm.io/package/@cucumber/cucumber-expressions.md) ^16.0.0

## Alternatives

- [duck](https://npm.io/package/duck.md) — 4.2M weekly downloads
- [ava](https://npm.io/package/ava.md) — 560.2K weekly downloads
- [storybook-addon-module-mock](https://npm.io/package/storybook-addon-module-mock.md) — 71.7K weekly downloads
- [@ethereum-waffle/mock-contract](https://npm.io/package/@ethereum-waffle/mock-contract.md) — 40.0K weekly downloads
- [aws-elasticsearch-connector](https://npm.io/package/aws-elasticsearch-connector.md) — 37.4K weekly downloads

## Recent versions

- 0.0.3 (latest) — 2022-09-19
- 0.0.2 — 2022-09-19
- 0.0.1 — 2022-09-19

## README

# Autometa Cucumber

**Full Documentation/Getting Started can be [found here](https://bendat.github.io/autometa/docs/bdd/cucumber/intro/)**

Autometa is an Cucumber alternative inspired by [jest-cucumber](https://github.com/bencompton/jest-cucumber) using structured tests that closely resemble their original feature file counterpart.

## Preview

Assuming the following feature file:

```gherkin title='Create a feature file'
Feature: Registering

    Background: Provide password
        Given a provided password 'password1234'

    Scenario: A user registers
        Given a provided username 'frankie2'
        When the user registers
        Then they are shown their profile

    Rule: A username cannot contain special characters
        Scenario Outline: A user cannot register with a special character
            Given a provided username '<username>'
            When the user registers
            Then they are displayed an error
                | message                                      |
                | A username cannot contain special characters |

            Examples:
                | username  |
                | frankie2; |
                | frankie2, |
                | frankie2" |
```

We can create our test:

```ts title="Step Definitions"
import {UserDriver} from '../fugazi-ui-drivers';
import {Feature} from '@autometa/cucumber'

Feature(({ Background, Scenario, Rule }) => {
  let user: UserDriver;
  beforeEach(() => {
    user = new UserDriver();
  });

  Background(({ Given, When }) => {
    Given('a provided password {string}', (password: string) => {
      user.setPassword(password);
    });

    // steps can be run in background even if not defined so
    // in gherkin. This way we can take advantage of cucumber
    // expressions and/or regex
    Given('a provided username {string}', (username: string) => {
      user.setUsername(username);
    });

    When('the user registers', async () => {
      await user.performRegistration();
    });
  });

  Scenario('A user registers', ({ Then }) => {
    Then('they are shown their profile', () => {
      user.verifyProfile();
    });
  });

  Rule(
    'A username cannot contain special characters',
    ({ ScenarioOutline }) => {
      ScenarioOutline(
        'A user cannot register with a special character',
        ({ Then }) => {
          Then('they are displayed an error', (table: GherkinTable) => {
            user.verifyError(table);
          });
        }
      );
    }
  );
}, './sample.feature');
```

---
_Source: https://npm.io/package/@autometa/cucumber · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
