Wondering what’s next for npm?Check out our public roadmap! »

    TypeScript icon, indicating that this package has built-in type declarations

    4.0.2 • Public • Published

    Property based testing for AVA based on fast-check

    Build Status npm version

    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


    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.


    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 => {
      // ... omitted for brevity
    testProp.after(t => {

    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>;
      'should reach terminal state',
      (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
    ^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) ^2.0.0
    • (1) ava@>=3.9.0 for t.try support
    • (2) fast-check@^2.0.0 for hybrid module support: commonjs and esm together
    • (3) ava@>=0.1.0 for its Promise support


    npm i ava-fast-check

    DownloadsWeekly Downloads






    Unpacked Size

    23.9 kB

    Total Files


    Last publish


    • avatar