jest-sandbox
v1.1.2
Published
Simple sinon like sandbox for jest
Downloads
11,900
Readme
jest-sandbox
Track jest spies and stubs easily.
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