## TL;DR

The Gherkin step no longer matches any step definition, usually after a rename. Update the step text or the definition's expression so they match again, and use Cucumber's snippets to catch drift.

## Error

```text
Undefined step: "I click the Save button" (Cucumber::Undefined)
You can implement step definitions for undefined steps with these snippets:
```

## Steps

1. Copy the undefined step text exactly. Expected: you have the literal string.
2. Find the old definition: search step files for the previous wording. Expected: the renamed or deleted definition.
3. Update either the feature file (if the new wording is better) or the definition's regex/expression (if the old step should still work). Expected: one source of truth.
4. Run with `--strict` so undefined steps fail instead of passing silently. Expected: drift is caught immediately.
5. Re-run the feature. Expected: green.

## When to use

- `Undefined step` after a refactor or rename.
- Step definition files reorganized.

## When not to use

- Brand-new steps (write the definition; the snippet helps).
- Parameter type mismatches (different error).

## Tool compatibility

- Cucumber Ruby/JS; `--strict` mode.

## Variant phrasings

### Cucumber step undefined after rename

The refactor trigger; update text or definition.

### Undefined steps in Cucumber

The general case; snippets show the fix.

## Why it happens

Steps are matched by string. Renaming either side without the other breaks the match, and refactors rename things constantly.

## Edge cases

- Overly clever regexes match too much; prefer Cucumber expressions.
- `--strict` in CI prevents silent skips.
- Shared step libraries need versioning when features diverge.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_4C0qHqVjon-ZaR8l3f5SEg
