# aft-vitest-reporter

> Automated Functional Testing (AFT) Reporter for use with Vite Test Framework (vitest)

Latest version **12.1.1** (published 2024-05-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install aft-vitest-reporter
pnpm add aft-vitest-reporter
yarn add aft-vitest-reporter
bun add aft-vitest-reporter
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 12.1.1 |
| Published | 2024-05-23 |
| First published | 2024-04-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 120.4 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Jason Holt Smith |
| Maintainers | bicarbon8 |
| Keywords | aft, functional, automation, e2e, integration, vitest, reporter |

## Links

- npm: https://www.npmjs.com/package/aft-vitest-reporter
- Repository: https://github.com/bicarbon8/automated-functional-testing
- Homepage: https://github.com/bicarbon8/automated-functional-testing#readme
- Issues: https://github.com/bicarbon8/automated-functional-testing/issues
- npm.io page: https://npm.io/package/aft-vitest-reporter

## Dependencies (2)

- [vitest](https://npm.io/package/vitest.md) ^1.5.0
- [aft-core](https://npm.io/package/aft-core.md) ^12.1.1

## 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
- [vest](https://npm.io/package/vest.md) — 50.1K weekly downloads
- [@ethereum-waffle/mock-contract](https://npm.io/package/@ethereum-waffle/mock-contract.md) — 40.0K weekly downloads

## Recent versions

- 12.1.1 (latest) — 2024-05-23
- 12.1.0 — 2024-05-17
- 12.0.1 — 2024-05-16
- 12.0.0 — 2024-05-15
- 11.2.1 — 2024-05-10
- 11.2.0 — 2024-05-09
- 11.1.1 — 2024-05-07
- 11.1.0 — 2024-04-18

## README

# AFT-Vitest-Reporter
a Vitest `Reporter` integration for AFT providing support for AFT plugins, configuration and helpers

## Installation
`> npm i aft-vitest-reporter`

## Vitest Configuration
using this `Reporter` requires either calling the `vitest` command with the following argument `--reporter=aft-vitest-reporter` or from within a `vitest.config.mjs` file like the following: 
```javascript
// vitest.config.mjs
import { defineConfig, configDefaults } from 'vitest/config';

export default defineConfig({
  ...configDefaults,
  test: {
    reporters: ['default', './node_modules/aft-vitest-reporter/dist/src/aft-vitest-reporter.js'],
    environment: 'node',
  }
});
```

## AFT Helpers
this package comes with two helper classes that can be utilised from within your Vitest specs to make use of AFT features.

### `AftVitestTest`
the `AftVitestTest` class extends from the `AftTest` class providing the ability to parse the Spec name for any referenced Test. each Test ID must be surrounded with square brackets `[ABC123]`. you can then either directly call the `AftVitestTest.shouldRun()` async function which will determine if your test should be run based on any AFT `PolicyPlugin` instances referenced in your `aftconfig.json` file or you can call `aftVitestTest(this, testFunction)` which will perform the `AftVitestTest.shouldRun()` call and mark the test as skipped if it should not be run. using the `AftVitestTest` class would look like the following:
> **!!WARNING!!** using arrow functions in your Spec definition **IS NOT SUPPORTED** if using `AftVitestTest` because it removes the `this` scope
```javascript
describe('YourTestSuite', () => {
    // use `aftVitestTest` to report results
    it('can check if test [C1234] should be run', async function() {
        await aftVitestTest(this, async (v: AftVitestTest) => {
            // calls `v.test.skip()` if should not be run
            await v.reporter.error('we should never get here if C1234 should not be run');
            const result = await doStuff();
            await t.verify(result, equaling('expected'));
        }); // handles submitting the result to any AFT Reporter Plugins
    });

    // use `AftVitestReporter` to report results
    it('can check if test [C2345] should be run', async function() {
        const aft = new AftVitestTest(this);
        const shouldRun = await aft.shouldRun();
        if (shouldRun.result !== true) {
            await aft.pending(shouldRun.message); // marks test as skipped
        }
        const result = await doStuff();
        expect(result).to.equal('expected'); // AftVitestReporter handles submitting the result to any AFT Reporter Plugins
    });
});
```
which would output the following to your console and any AFT `ReportingPlugin` instances referenced in your `aftconfig.json` if the test ID should not be run:
```text
17:52:45 - [YourTestSuite can check if test [C1234] should be run] - WARN - none of the supplied tests should be run: [C1234]
17:52:45 - [YourTestSuite can check if test [C1234] should be run] - WARN - test skipped
```

## NOTES
- the `AftVitestTest` constructors expects to be passed a valid `scope` containing reference to the currently executing `Vitest.Test`. typically this will be an object passed in to your `test` or `it` function within your Spec
- this Vitest `Reporter` works in both parallel and sequential execution modes, but you **MUST ALWAYS** pass a context to your `it` or `test` function if you are using `AftVitestTest` class within your Spec
- the `aft-vitest-reporter` Vitest Reporter can be used when testing with an environment of `node` or `jsdom` or any of the supported Vitest environment config values, but the `AftVitestTest` class and `aftVitestTest` function can only be used with your environment set to `node` via your `vitest.config.mjs` file

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