Awesome
⚠️⚠️⚠️ Project moved to https://github.com/dubzzz/fast-check/tree/main/packages/ava ⚠️⚠️⚠️
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-check
Example
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
.skip
, 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<sup>(2)(4)</sup> |
^4.0.0 | >=3.9.0<sup>(1)</sup> | ^2.0.0<sup>(2)</sup> |
^3.0.0 | >=3.9.0<sup>(1)</sup> | ^2.0.0<sup>(2)</sup> |
^2.0.0 | >=3.9.0<sup>(1)</sup> | ^1.0.0 |
^1.0.0 | >=0.1.0<sup>(3)</sup> | ^1.0.0 |
- (1)
ava@>=3.9.0
fort.try
support - (2)
fast-check@^2.0.0
for hybrid module support:commonjs
andesm
together - (3)
ava@>=0.1.0
for its Promise support - (4) Already compatible with
fast-check@^3.0.0
but bump to6.0.0
for updated peer version