JSPM

ts-sinon-maintenance

2.0.6
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q25430F
  • License MIT

sinon library extension to stub whole object and interfaces. This is a maintenance fork for BOM compliance.

Package Exports

  • ts-sinon-maintenance
  • ts-sinon-maintenance/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ts-sinon-maintenance) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

ts-sinon

Sinon extension providing functions to:

  • stub all object methods
  • stub interface
  • stub object constructor

Prerequisites

  1. You have a version of Node.js >= v8.4.0
  2. You have installed Typescript

Installation

npm install --save-dev ts-sinon or yarn add --dev ts-sinon

Object stubs example

Importing stubObject function:

  • import single function:
import { stubObject } from "ts-sinon";
  • import as part of sinon singleton:
import * as sinon from "ts-sinon";

const stubObject = sinon.stubObject;

Stub all object methods:

class Test {
    method() { return "original" }
}

const test = new Test();
const testStub = stubObject<Test>(test);

testStub.method.returns("stubbed");

expect(testStub.method()).to.equal("stubbed");

Partial stub:

class Test {
    public someProp: string = "test";
    methodA() { return "A: original" }
    methodB() { return "B: original" }
}

const test = new Test();
// second argument must be existing class method name, in this case only "methodA" or "methodB" are accepted.
const testStub = stubObject<Test>(test, ["methodA"]);

expect(testStub.methodA()).to.be.undefined;
expect(testStub.methodB()).to.equal("B: original");

Stub with predefined return values (type-safe):

class Test {
    method() { return "original" }
}

const test = new Test();
const testStub = stubObject<Test>(test, { method: "stubbed" });

expect(testStub.method()).to.equal("stubbed");

Interface stubs example

Importing stubInterface function:

  • import single function:
import { stubInterface } from "ts-sinon";
  • import as part of sinon singleton:
import * as sinon from "ts-sinon";

const stubInterface = sinon.stubInterface;

Interface stub (stub all methods):

interface Test {
    method(): string;
}

const testStub = stubInterface<Test>();

expect(testStub.method()).to.be.undefined;

testStub.method.returns("stubbed");

expect(testStub.method()).to.equal("stubbed");

Interface stub with predefined return values (type-safe):

interface Test {
    method(): string;
}

// method property has to be the same type as method() return type
const testStub = stubInterface<Test>({ method: "stubbed" });

expect(testStub.method()).to.equal("stubbed");

Object constructor stub example

Importing stubConstructor function:

  • import single function:
import { stubConstructor } from "ts-sinon";
  • import as part of sinon singleton:
import * as sinon from "ts-sinon";

const stubConstructor = sinon.stubConstructor;

Object constructor stub (stub all methods):

  • without passing predefined args to the constructor:
class Test {
    public someVar: number = 10;

    method(): string {
        return "value";
    }
}

// type will be guessed automatically
const testStub = stubConstructor(Test);

expect(testStub.method()).to.be.undefined;

testStub.method.returns("stubbed");

expect(testStub.method()).to.equal("stubbed");

expect(testStub.someVar).to.equal(10);

testStub.someVar = 20;

expect(testStub.someVar).to.equal(20);
  • with passing predefined args to the constructor:
class Test {
    constructor(public someVar: string, y: boolean) {}

    // ...
}

// it won't allow to pass incorrect args
const testStub = stubConstructor(Test, "someValue", true);

expect(testStub.someVar).to.equal("someValue");

Sinon methods

By importing 'ts-sinon' you have access to all sinon methods.

import sinon, { stubInterface } from "ts-sinon";

const functionStub = sinon.stub();
const spy = sinon.spy();
// ...

or

import * as tsSinon from "ts-sinon"

const functionStub = tsSinon.default.stub();
const spy = tsSinon.default.spy();
const tsStubInterface = tsSinon.stubInterface<T>();

// ...

Packages

Dependencies:
  1. Microsoft/TypeScript
  2. TypeStrong/ts-node
  3. sinonjs/sinon
Dev Dependencies:
  1. mochajs/mocha
  2. chaijs/chai
  3. domenic/sinon-chai

Tests

npm test