jest-random-mock

February 24, 2024 ยท View on GitHub

Mock Math.random when run unit test cases with jest, output deterministic random number.

Build Status Coverage Status npm npm

Install

This should only be installed as a development dependency (devDependencies) as it is only designed for testing.

$ npm i --save-dev jest-random-mock

Usage

Use the only 3 api for test cases.

  • mock(): Mocks the Math.random, with deterministic random function.
  • clear(): Shut down the mock system, use original Math.random.
  • createDeterministicRandom(): Return a deterministic random number generator.

Use it in jest env.

import { mock, clear } from "jest-random-mock";

beforeEach(() => {
  mock();
});

test("your test cases", () => {
  mock();
  const r1 = Math.random();
  clear();

  mock();
  const r2 = Math.random();
  clear();

  // expect r1 should be same with r2.
});

afterEach(() => {
  clear();
});

Use it as a library.

import { createDeterministicRandom } from "jest-random-mock";

const random = createDeterministicRandom();

const v1 = random();
const v2 = random();

Random distribution

image

import { Chart } from "@antv/g2";
import { createDeterministicRandom } from "jest-random-mock";

const random = createDeterministicRandom();

const chart = new Chart({
  container: "container",
  autoFit: true,
  theme: "academy",
});

const flex = chart
  .spaceFlex()
  .attr("direction", "row")
  .attr("ratio", [1, 1, 1]);

const TIMES = [100, 1000, 10000];

TIMES.forEach((time) => {
  const data = new Array(time).fill(0).map(() => ({ v: random() }));
  flex
    .rect()
    .data(data)
    .encode("x", "v")
    .encode("color", "steelblue")
    .transform({ type: "binX", y: "count", thresholds: 10 })
    .style("inset", 0.5)
    .axis("x", { title: false })
    .axis("y", { title: `${time} times Radnom` });
});

chart.render();

License

MIT@hustcc.