jest-sandbox

Simple sinon like sandbox for jest

Usage no npm install needed!

<script type="module">
  import jestSandbox from 'https://cdn.skypack.dev/jest-sandbox';
</script>

README

jest-sandbox

Track jest spies and stubs easily.

Build Status

The one feature I really missed when switching from sinon.js to jest spies and mocks was sandboxes. They allow you to create as many spies and stubs as you want without having to track them all and clear them manually.

Meet jest-sandbox:

import createSandbox from 'jest-sandbox';

import cow from './moo.js';

describe('A cow 🐄', () => {
  const sandbox = createSandbox();

  // Create as many spies as you like
  const spyStomach = sandbox.fn();
  const spyPoop = sandbox.spyOn(cow, 'poop');

  // Clear 'em all with one call
  beforeEach(() => sandbox.clear());

  test('Eats grass', () => {
    return cow.eatGrass.then(spyStomach).then(() => {
      expect(spyStomach).toHaveBeenCalledWith('🌱');
      expect(spyPoop).toHaveBeenCalledTimes(0);
    });
  });

  test('Sometimes poops', () => {
    return cow.digest().then(() => {
      expect(spyStomach).toHaveBeenCalledTimes(0);
      expect(spyPoop).toHaveBeenCalledWith('💩');
    });
  });
});

Install

yarn add jest-sandbox -D

Some people prefer npm;

npm i jest-sandbox -D

API

Make a sandbox:

import createSandbox from 'jest-sandbox';

const sandbox = createSandbox();

sandbox.fn([implementation])

Returns a new mock function and keeps track of it. Similar to calling jest.fn([implementation]).

sandbox.spyOn(object, methodName)

Spies on a method and returns a the wrapped mock function. Similar to calling jest.spyOn(object, methodName).

sandbox.clear()

Clears all spies in the sandbox. Actually calls .mockClear() on every spy it keeps track of.

sandbox.reset()

Resets all spies in the sandbox. Actually calls .mockReset() on every spy it keeps track of.

sandbox.restore()

Restores all spies in the sandbox. Actually calls .mockRestore() on every spy it keeps track of.

Note

Keep in mind that you can still clear, reset and restore the single spies manually, like you're used to.

Contribute

I'm happy for every feature request, bugfix and / or PR.

Run tests:

yarn test # npm test is also ok

Build the whole shebang:

yarn build # npm build works as well