jest-sandbox
Version:
Simple sinon like sandbox for jest
101 lines (65 loc) • 2.58 kB
Markdown
# jest-sandbox
Track jest spies and stubs easily.
[](https://travis-ci.org/JoinColony/jest-sandbox)
The one feature I really missed when switching from [sinon.js](http://sinonjs.org) to jest spies and mocks was _[sandboxes](http://sinonjs.org/releases/v2.1.0/sandbox/)_. 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:
```javascript
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
```shell
yarn add jest-sandbox -D
```
Some people prefer `npm`;
```shell
npm i jest-sandbox -D
```
### API
Make a sandbox:
```javascript
import createSandbox from 'jest-sandbox';
const sandbox = createSandbox();
```
#### `sandbox.fn([implementation])`
Returns a new [mock function](https://facebook.github.io/jest/docs/mock-function-api.html) 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](https://facebook.github.io/jest/docs/mock-function-api.html). 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:
```shell
yarn test # npm test is also ok
```
Build the whole shebang:
```shell
yarn build # npm build works as well
```