Skip to content

🎲 Mock Math.random in jest, with deterministic random number.

License

Notifications You must be signed in to change notification settings

hustcc/jest-random-mock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jest-random-mock

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.

About

🎲 Mock Math.random in jest, with deterministic random number.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published