Skip to content

Latest commit

 

History

History
172 lines (111 loc) · 3.72 KB

README.md

File metadata and controls

172 lines (111 loc) · 3.72 KB

codecov CI

sinon library extension to stub whole object and interfaces

About

A fork of ts-sinon that lets you BYO sinon. Can probably be retired if ttarnowski/ts-sinon#255 is ever merged.

  • 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

Example

Stub all object methods

import Sinon from 'sinon'
import { stubObject } from 'ts-sinon'

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

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

testStub.method.returns('stubbed')

expect(testStub.method()).to.equal('stubbed')

Example

Partial stub

import Sinon from 'sinon'
import { stubObject } from 'ts-sinon'

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

const test = new Test()
const testStub = stubObject<Test>(test, {
  method: Sinon.stub().returns('stubbed')
})

expect(testStub.method()).to.equal('stubbed')

Example

Interface stub (stub all methods)

import Sinon from 'sinon'
import { stubInterface } from 'ts-sinon'

interface Test {
  method(): string
}

const testStub = stubInterface<Test>()

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

testStub.method.returns('stubbed')

expect(testStub.method()).to.equal('stubbed')

Example

Interface stub with predefined return values (type-safe)

import Sinon from 'sinon'
import { stubInterface } from 'ts-sinon'

interface Test {
  method(): string
}

// method property has to be the same type as method() return type
const testStub = stubInterface<Test>({
  method: Sinon.stub().returns('stubbed')
})

expect(testStub.method()).to.equal('stubbed')

Example

Object constructor stub (stub all methods)

  • without passing predefined args to the constructor:
import Sinon from 'sinon'
import { stubConstructor } from 'ts-sinon'

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)

Example

Passing predefined args to the constructor

import Sinon from 'sinon'
import { stubConstructor } from 'ts-sinon'

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')

Install

$ npm i sinon-ts

API Docs

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.