NPM sinon Package
Sinon Documentation
Usage
npm install sinon --save-dev
Sinon provides a set of spies, stubs, and mocks for testing JavaScript applications. To use Sinon, you first need to create a Sinon sandbox. A sandbox is a container for spies, stubs, and mocks. You can create a sandbox using the sinon.createSandbox()
method.
Once you have created a sandbox, you can use the various methods provided by Sinon to create spies, stubs, and mocks.
Spies
Spies are objects that wrap around existing functions and track how they are called. You can create a spy using the sandbox.spy()
method.
const mySpy = sandbox.spy(myFunction);
Stubs
Stubs are objects that replace existing functions and provide a custom implementation. You can create a stub using the sandbox.stub()
method.
const myStub = sandbox.stub(myFunction).returns(42);
Mocks
Mocks are objects that provide a complete implementation for an interface. You can create a mock using the sandbox.mock()
method.
const myMock = sandbox.mock(myInterface);
Implementation Guide
Sinon is implemented using a variety of techniques, including:
- Function wrapping: Spies wrap around existing functions and track how they are called.
- Object mocking: Stubs replace existing functions and provide a custom implementation.
- Interface mocking: Mocks provide a complete implementation for an interface.
Configuration Options
Sinon provides a number of configuration options that can be used to customize the behavior of the library. These options can be set using the sinon.config
object.
sinon.config.useFakeTimers = true;
Best Practices
When using Sinon, it is important to follow these best practices:
- Use a sandbox for each test: This will ensure that spies, stubs, and mocks are properly isolated from each other.
- Restore the sandbox after each test: This will ensure that spies, stubs, and mocks are properly cleaned up.
- Avoid using sinon.spy() directly: Instead, use the
sandbox.spy()
method to create spies. - Prefer stubs and mocks over spies: Stubs and mocks provide more control over the behavior of the code under test.
Examples
Here are some examples of how to use Sinon:
Using a spy to track how a function is called:
const myFunction = sinon.spy();
myFunction(1, 2, 3);
expect(myFunction).to.have.been.calledOnce;
expect(myFunction).to.have.been.calledWith(1, 2, 3);
Using a stub to replace a function with a custom implementation:
const myFunction = sinon.stub().returns(42);
const result = myFunction(1, 2, 3);
expect(result).to.equal(42);
Using a mock to provide a complete implementation for an interface:
const myInterface = sinon.mock();
myInterface.expects('myMethod').once().with(1, 2, 3);
myInterface.verify();