Customization of the parameters used to run the properties

Since 0.0.6

interface Parameters<T = void> {
    asyncReporter?: (runDetails: RunDetails<T>) => Promise<void>;
    endOnFailure?: boolean;
    errorWithCause?: boolean;
    examples?: T[];
    ignoreEqualValues?: boolean;
    interruptAfterTimeLimit?: number;
    markInterruptAsFailure?: boolean;
    maxSkipsPerRun?: number;
    numRuns?: number;
    path?: string;
    randomType?: RandomType | (seed: number) => RandomGenerator;
    reporter?: (runDetails: RunDetails<T>) => void;
    seed?: number;
    skipAllAfterTimeLimit?: number;
    skipEqualValues?: boolean;
    timeout?: number;
    unbiased?: boolean;
    verbose?: boolean | VerbosityLevel;
    logger(v: string): void;
}

Type Parameters

  • T = void

Properties

asyncReporter?: (runDetails: RunDetails<T>) => Promise<void>

Replace the default reporter handling errors by a custom one

Reporter is responsible to throw in case of failure: default one throws whenever runDetails.failed is true. But you may want to change this behaviour in yours.

Only used when calling assert Cannot be defined in conjonction with reporter Not compatible with synchronous properties: runner will throw

Since 1.25.0

endOnFailure?: boolean

Stop run on failure

It makes the run stop at the first encountered failure without shrinking.

When used in complement to seed and path, it replays only the minimal counterexample.

Since 1.11.0

errorWithCause?: boolean

Should the thrown Error include a cause leading to the original Error?

In such case the original Error will disappear from the message of the Error thrown by fast-check and only appear within the cause part of it.

Remark: At the moment, only node (≥16.14.0) and vitest seem to properly display such errors. Others will just discard the cause at display time.

examples?: T[]

Custom values added at the beginning of generated ones

It enables users to come with examples they want to test at every run

Since 1.4.0

ignoreEqualValues?: boolean

Discard runs corresponding to already tried values.

WARNING: Discarded runs will not be replaced. In other words, if you ask for 100 runs and have 2 discarded runs you will only have 98 effective runs.

NOTE: Relies on fc.stringify to check the equality.

Since 2.14.0

interruptAfterTimeLimit?: number

Interrupt test execution after a given time limit: disabled by default

NOTE: Relies on Date.now().

NOTE: Useful to avoid having too long running processes in your CI. Replay capability (see seed, path) can still be used if needed.

WARNING: If the test got interrupted before any failure occured and before it reached the requested number of runs specified by numRuns it will be marked as success. Except if markInterruptAsFailure has been set to true

Since 1.19.0

markInterruptAsFailure?: boolean

Mark interrupted runs as failed runs if preceded by one success or more: disabled by default Interrupted with no success at all always defaults to failure whatever the value of this flag.

Since 1.19.0

maxSkipsPerRun?: number

Maximal number of skipped values per run

Skipped is considered globally, so this value is used to compute maxSkips = maxSkipsPerRun * numRuns. Runner will consider a run to have failed if it skipped maxSkips+1 times before having generated numRuns valid entries.

See pre for more details on pre-conditions

Since 1.3.0

numRuns?: number

Number of runs before success: 100 by default

Since 1.0.0

path?: string

Way to replay a failing property directly with the counterexample. It can be fed with the counterexamplePath returned by the failing test (requires seed too).

Since 1.0.0

randomType?: RandomType | (seed: number) => RandomGenerator

Random number generator: xorshift128plus by default

Random generator is the core element behind the generation of random values - changing it might directly impact the quality and performances of the generation of random values. It can be one of: 'mersenne', 'congruential', 'congruential32', 'xorshift128plus', 'xoroshiro128plus' Or any function able to build a RandomGenerator based on a seed

As required since pure-rand v6.0.0, when passing a builder for RandomGenerator, the random number generator must generate values between -0x80000000 and 0x7fffffff.

Since 1.6.0

reporter?: (runDetails: RunDetails<T>) => void

Replace the default reporter handling errors by a custom one

Reporter is responsible to throw in case of failure: default one throws whenever runDetails.failed is true. But you may want to change this behaviour in yours.

Only used when calling assert Cannot be defined in conjonction with asyncReporter

Since 1.25.0

seed?: number

Initial seed of the generator: Date.now() by default

It can be forced to replay a failed run.

In theory, seeds are supposed to be 32-bit integers. In case of double value, the seed will be rescaled into a valid 32-bit integer (eg.: values between 0 and 1 will be evenly spread into the range of possible seeds).

Since 0.0.6

skipAllAfterTimeLimit?: number

Skip all runs after a given time limit: disabled by default

NOTE: Relies on Date.now().

NOTE: Useful to stop too long shrinking processes. Replay capability (see seed, path) can resume the shrinking.

WARNING: It skips runs. Thus test might be marked as failed. Indeed, it might not reached the requested number of successful runs.

Since 1.15.0

skipEqualValues?: boolean

Skip runs corresponding to already tried values.

WARNING: Discarded runs will be retried. Under the hood they are simple calls to fc.pre. In other words, if you ask for 100 runs but your generator can only generate 10 values then the property will fail as 100 runs will never be reached. Contrary to ignoreEqualValues you always have the number of runs you requested.

NOTE: Relies on fc.stringify to check the equality.

Since 2.14.0

timeout?: number

Maximum time in milliseconds for the predicate to answer: disabled by default

WARNING: Only works for async code (see asyncProperty), will not interrupt a synchronous code.

Since 0.0.11

unbiased?: boolean

Force the use of unbiased arbitraries: biased by default

Since 1.1.0

verbose?: boolean | VerbosityLevel

Enable verbose mode: VerbosityLevel.None by default

Using verbose: true is equivalent to verbose: VerbosityLevel.Verbose

It can prove very useful to troubleshoot issues. See VerbosityLevel for more details on each level.

Since 1.1.0

Methods