A test design & BDD tool that helps you separate the what to test from the how to automate it. You write test cases in a simple Markdown format, and then automate them with Vitest (and soon with many more frameworks and languages).
-
-
You can compile and run your
*.harmony.md
files in thesrc
folder, and watch it, by runningnpx harmonyc --run --watch 'src/**/*.harmony.md'
- => this will generate tests into
*.test.mjs
files - => this will create a stub
*.steps.ts
file if it doesn't exist
- => this will generate tests into
-
A Harmony Code file is a Markdown file with a syntax that looks like this:
# Products API
- **Create**:
- **Anonymous:**
- create product => error: unauthorized
- **Admin**:
1. authenticate admin
2. create product => product created
3. **Delete:**
- delete product => product deleted
List items (either in ordered or bulleted lists) consist of an action and zero or more responses, separated by a =>
.
The generated steps contain the feature name after a ||
. Cucumber's steps are in one global namespace, but including the feature name makes it easy to scope step defintions by feature.
An ordered list means a sequence: the list items are included int the tests in order.
A bulleted list (-
or *
or +
) means a fork: the node directly follows its parent node. All list items are separate branches, they will generate separate scenarios.
Label are nodes that end with :
. You can use them to structure your test design.
They are not included in the test case, but the test case name is generated from the labels.
Paragraphs outside of lists are for humans only, they are ignored in the automated tests.
MIT