90 lines
2.4 KiB
Markdown
90 lines
2.4 KiB
Markdown
# test-samurai-mocha-runner
|
|
|
|
Mocha.js runner for the test-samurai Neovim plugin.
|
|
|
|
## Features
|
|
|
|
- Detects Mocha test files by checking `package.json` dependencies.
|
|
- Supports nearest, file, all, and failed-only commands.
|
|
- Streams results via a custom NDJSON reporter.
|
|
- Provides quickfix locations and per-test output.
|
|
- Captures hook failures (before/after/beforeEach/afterEach) as failed entries with output.
|
|
- Uses `--grep` with escaped patterns to match titles safely, even when running through `npm test`.
|
|
- Executes tests via `npx mocha` with the bundled UI + reporter so projects need no extra setup.
|
|
- `TSamAll` runs `test/**/*.test.js` by default.
|
|
|
|
## Full Name Convention
|
|
|
|
The runner builds stable full names using the active suite stack joined by `/`,
|
|
followed by the test title:
|
|
|
|
```
|
|
Suite/Subsuite/Test
|
|
```
|
|
|
|
This convention is used consistently in `results.*`, `parse_test_output`, and
|
|
`collect_failed_locations`. Failed-only runs translate `/` back to spaces for
|
|
Mocha's `--grep` matching. Avoid `/` in your titles if you rely on that mapping.
|
|
|
|
When the custom reporter provides `titlePath`, it is used to build full names
|
|
without ambiguity (titles may contain spaces).
|
|
|
|
## Reporter Payload
|
|
|
|
The runner uses the bundled NDJSON reporter at `scripts/mocha-ndjson-reporter.cjs`,
|
|
which emits one JSON object per line:
|
|
|
|
```
|
|
{
|
|
"event": "run-begin" | "run-end" | "suite" | "test" | "hook",
|
|
"status": "passed" | "failed" | "pending" | "skipped",
|
|
"title": "Test or suite title",
|
|
"fullTitle": "Mocha full title",
|
|
"titlePath": ["Parent", "Child", "Test"],
|
|
"hookType": "beforeEach" | "afterEach" | "beforeAll" | "afterAll",
|
|
"file": "/path/to/test.js",
|
|
"location": { "file": "/path/to/test.js", "line": 10, "column": 5 },
|
|
"output": ["stdout line 1", "stdout line 2"],
|
|
"error": { "message": "string", "stack": "string" }
|
|
}
|
|
```
|
|
|
|
The UI wrapper `scripts/bdd-with-location.cjs` attaches test/suite locations so
|
|
Quickfix and per-test output are consistent.
|
|
|
|
## Usage
|
|
|
|
Add the module to your test-samurai configuration:
|
|
|
|
```lua
|
|
require("test-samurai").setup({
|
|
runner_modules = {
|
|
"test-samurai-mocha-runner",
|
|
},
|
|
})
|
|
```
|
|
|
|
Override the default glob for `TSamAll`:
|
|
|
|
```lua
|
|
require("test-samurai-mocha-runner").setup({
|
|
all_test_glob = "test/**/*.test.js",
|
|
})
|
|
```
|
|
|
|
Enable debug logging (writes raw parser input lines):
|
|
|
|
```lua
|
|
require("test-samurai-mocha-runner").setup({
|
|
debug_log_path = "/tmp/tsam-mocha.log",
|
|
})
|
|
```
|
|
|
|
## Development
|
|
|
|
Run tests:
|
|
|
|
```bash
|
|
bash run_test.sh
|
|
```
|