testframe
A testing framework.
Features
Note
This is not a production ready project yet. Breaking changes should be expected.
Getting Started
Install
$ npm i -D @testingrequired/testframe@latest
Supported Node Versions
latest
& lts
Executable
The framework doesn't provide an executable so you'll need to create one: ./bin/testframe.js
import { run } from "@testingrequired/testframe";
run();
Configure
This will do nothing so far. The framework makes zero assumptions about how you want it to behave. Unit testing, mocking, what your test syntax looks like. You will need to define that behavior using middleware in the executable:
import { run, config, middleware } from "@testingrequired/testframe";
const { starter, matchTestFiles, specSyntax } = middleware;
run(config(starter, matchTestFiles("./tests/**/*.spec.js"), specSyntax));
A config
composes middleware to define that behavior. Here matchTestFiles
defines how to find the test files while specSyntax
defines how to read the them.
starter
is an optional middleware that bundles some of the core middlewares to get you started: randomize test order, run tests, report results and more. Of course you can skip this and define exactly what middleware you wish to use.
Wire Test Script
{
...package,
"scripts": {
"test": "node -r esm ./bin/testframe.js"
}
}
This example uses esm
to support ES modules in your executable.
Write Tests
Create a test file: ./tests/example.spec.js
describe("increment value", () => {
let value = 0;
beforeEach(() => {
value++;
});
it("should equal correct value", () => assert(value === 1));
});
Run Tests
$ npm test
Example Project
See a simple implementation: https://github.com/testingrequired/tf-example
Why
There are several great test frameworks out there (see: jest, mocha, jasmine) that will likely fit your needs. They will definitely fit your unit testing needs and their documentation/support is strong. They are also production ready. You're highly encouraged to use those if they work for you and the tests you're writing.
This framework is different in that it's not a unit testing framework. It tries not to make any assumptions about the tests you are writing. Instead you're choosing, building, mixing and matching behaviors that work for your tests. Unit, integration, end to end, API contract tests. Any test syntax, expose integrations through global variables in tests, report results.
These behaviors as defined as middleware functions. There are wide range of middleware included but it's easy write your own.
Next Steps
Middleware
Look through the growing list of available middleware to build the testing functionality your project needs.
More In Depth
The anatomy documentation explains how the framework is structured and how middleware works. This would be a good place to start if you want to write custom middleware.
Custom Middleware
Define the behavior required to run your tests by writing custom middleware.
Contributing
See development.