Skip to content

Sandboxes ​

Introduction ​

Sandboxes remove the need to keep track of every fake created, which greatly simplifies cleanup.

Default sandbox ​

The sinon object itself is a sandbox, known as the default sandbox.

It has all the methods and properties as the sandbox API.

Using the default sandbox ​

This is the recommended way to use sandboxes.

js
import tap from "tap";
import * as sinon from "sinon";

tap.test("sandbox - using the default sandbox", (t) => {
  const myObject = {
    hello: "world"
  };

  // using the stub method on the default sandbox
  sinon.stub(myObject, "hello").value("Sinon");

  t.equal(myObject.hello, "Sinon", "property stubbed to Sinon");

  sinon.restore();
  t.equal(myObject.hello, "world", "property restored to world");

  t.end();
});

Using a custom sandbox ​

Unless you have an advanced setup or need a divergent configuration, you probably want to only use the default sandbox.

js
import tap from "tap";
import * as sinon from "sinon";

tap.test("sandbox - using a custom sandbox", (t) => {
  const sandbox = sinon.createSandbox();
  const myObject = {
    hello: "world"
  };

  // using the stub method on the sandbox
  sandbox.stub(myObject, "hello").value("Banana");

  t.equal(myObject.hello, "Banana", "property stubbed to Banana");

  sandbox.restore();
  t.equal(myObject.hello, "world", "property restored to world");

  t.end();
});