Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
ts-stubber
Advanced tools
Lazy Stubbing a TypeScript Class or Interface with any Mocking Framework for testing in Isolation
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.
npm i -D @ts-stubber
or
yarn add -D @ts-stubber
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();
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);
});
yarn
npm run build
npm run test
npm run cy:run
This project is licensed under the MIT License - see the LICENSE.md file for details
FAQs
Lazy Stubbing a TypeScript Class or Interface with any Mocking Framework for testing in Isolation
The npm package ts-stubber receives a total of 400 weekly downloads. As such, ts-stubber popularity was classified as not popular.
We found that ts-stubber demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
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.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.