ava-fast-check v6.0.0
Property based testing for AVA based on fast-check
Bring the power of property based testing framework fast-check into AVA.
ava-fast-check simplifies the integration of fast-check into AVA testing framework.
Getting Started
Install ava-fast-check and its peer dependencies:
npm install --save-dev ava fast-check ava-fast-checkExample
import { testProp, fc } from 'ava-fast-check';
// for all a, b, c strings
// b is a substring of a + b + c
testProp('should detect the substring', [fc.string(), fc.string(), fc.string()], (t, a, b, c) => {
t.true((a + b + c).includes(b));
});The property is passed AVA's t argument for its first parameter, and the value of each arbitrary for the current test case for the rest of the parameters.
ava-fast-check supports all of AVA's assertions and like AVA, supports synchronous and asynchronous functions, including promises, observables, and callbacks. See AVA's documentation for more information.
Advanced
fast-check Parameters
testProp accepts an optional fc.Parameters for forwarding custom parameters to fast-check (more).
AVA Modifiers
ava-fast-check also comes with .only, .serial, and .failing modifiers from AVA.
import { testProp, fc } from 'ava-fast-check';
testProp('should replay the test for the seed 4242', [fc.nat(), fc.nat()], (t, a, b) => {
t.is(a + b, b + a);
}, { seed: 4242 });
testProp.skip('should be skipped', [fc.fullUnicodeString()], (t, text) => {
t.is([...text].length, text.length);
});AVA before/after Hooks
ava-fast-check exposes AVA's before/after hooks:
import { testProp, fc } from 'ava-fast-check';
testProp.before(t => {
connectToDatabase();
});
testProp(
// ... omitted for brevity
);
testProp.after(t => {
closeDatabaseConnection();
});AVA Execution Context
ava-fast-check mirror's AVA's procedure for customizing the test execution context:
import { fc, testProp as anyTestProp, PropertyTestInterface } from '../src/ava-fast-check';
type TestContext = {
state: string
};
const testProp = anyTestProp as PropertyTestInterface<TestContext>;
testProp(
'should reach terminal state',
[fc.string()],
(t, received) => {
// here t is typed as ExecutionContext<TestContext>
console.log(t.context.state); // logs 'uninitialized'
// ... omitted for brevity
}
);Minimal requirements
| ava-fast-check | AVA | fast-check |
|---|---|---|
| ^6.0.0 | >=4.0.0 | ^3.0.0 |
| ^5.0.0 | >=4.0.0 | ^2.0.0(2)(4) |
| ^4.0.0 | >=3.9.0(1) | ^2.0.0(2) |
| ^3.0.0 | >=3.9.0(1) | ^2.0.0(2) |
| ^2.0.0 | >=3.9.0(1) | ^1.0.0 |
| ^1.0.0 | >=0.1.0(3) | ^1.0.0 |
- (1)
ava@>=3.9.0fort.trysupport - (2)
fast-check@^2.0.0for hybrid module support:commonjsandesmtogether - (3)
ava@>=0.1.0for its Promise support - (4) Already compatible with
fast-check@^3.0.0but bump to6.0.0for updated peer version