New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

ts-stubber

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ts-stubber

Lazy Stubbing a TypeScript Class or Interface with any Mocking Framework for testing in Isolation

  • 1.0.13
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
492
decreased by-69.44%
Maintainers
1
Weekly downloads
 
Created
Source

ts-stubber

ts-stubber npm version MIT typescript

Branches Functions Lines Statements Coverage total

A generic stubbed instance creator to lazy stub any interface/class, while completely avoiding calling class's constructor. Thus, enabling both avoiding side effects that may occur while class constructor is activated and mocking Classes with no default constructor.

Documentation

Installation

npm i -D @ts-stubber

or

yarn add -D @ts-stubber

Usage

This library provides an API to create a stubbed instance of a class or interface, including property functions, allowing overrides of methods, setters and getters..

class MyClass {
  constructor(input: number) {
    throw new Error("Should not be called");
  }
  func(input: number, text: string) {
    console.log(text);
    return input;
  }
  property: number = 3;
  optionalProperty?: number;
  get getter(): number {
    return this.property;
  }
  set setter(value: number) {
    throw new Error("Should not be called");
  }
}

// creating a stubbed instance using the native node:test module
const const nodeStubbedInstanceCreator = StubbedInstanceCreator<MyClass, Mock<Function>>(
  () => mock.fn()
);

const nodeMockMyClass = nodeStubbedInstanceCreator.createStubbedInstance();

// creating a stubbed instance using sinon
const sinonStubbedInstanceCreator = StubbedInstanceCreator<MyClass, SinonStub>(
  () => sinon.stub()
);

const sinonMockMyClass = sinonStubbedInstanceCreator.createStubbedInstance();

// creating a stubbed instance using jest
const jestStubbedInstanceCreator = StubbedInstanceCreator<MyClass, jest.Mock>(
  () => jest.fn()
);

const jestMockMyClass = jestStubbedInstanceCreator.createStubbedInstance();

Caveats, Known Issues, and Limitations

Due to the lazy nature of the stubbing, for properties to exist in the stub, they must be overridden or set with a value.

class MyClass {
  property: number = 3;
  get getter(): number {
    return this.property;
  }
  set setter(value: number) {
    throw new Error("Should not be called");
  }
}

it("should have own property given property is overridden", () => {
  const mockMyClass = StubbedInstanceCreator<MyClass, jest.Mock>(() =>
    jest.fn()
  ).createStubbedInstance({ property: 5 }); // this test will fail if property is not overridden
  expect((<MyClass>mockMyClass).hasOwnProperty("property")).toBe(true);
});

it("should have own property given property is set", () => {
  const mockMyClass = StubbedInstanceCreator<MyClass, jest.Mock>(() =>
    jest.fn()
  ).createStubbedInstance();
  mockMyClass.property = 8; // this test will fail if property is not set
  expect((<MyClass>mockMyClass).hasOwnProperty("property")).toBe(true);
});

Testing

  1. Set up the repo - yarn
  2. Build the project - npm run build
  3. Running Jest tests - npm run test
  4. Running Cypress tests - npm run cy:run

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Keywords

FAQs

Package last updated on 09 Jul 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc