@chubbyjs/chubbyjs-mock
Version:
A very strict mocking library for class based objects.
158 lines (121 loc) • 7.18 kB
Markdown
# chubbyjs-mock
[](https://github.com/chubbyjs/chubbyjs-mock/actions?query=workflow%3ACI)
[](https://coveralls.io/github/chubbyjs/chubbyjs-mock?branch=master)
[](https://dashboard.stryker-mutator.io/reports/github.com/chubbyjs/chubbyjs-mock/master)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
[](https://sonarcloud.io/dashboard?id=chubbyjs_chubbyjs-mock)
## Description
A very strict mocking library for class based objects.
## Requirements
* node: 12
## Installation
Through [NPM](https://www.npmjs.com) as [@chubbyjs/chubbyjs-mock][1].
```sh
npm i @chubbyjs/chubbyjs-mock@1.1.1
```
## Usage
### Mock a class
```ts
import { expect, test } from '@jest/globals';
import ArgumentCallback from '@chubbyjs/chubbyjs-mock/dist/Argument/ArgumentCallback';
import ArgumentInstanceOf from '@chubbyjs/chubbyjs-mock/dist/Argument/ArgumentInstanceOf';
import Call from '@chubbyjs/chubbyjs-mock/dist/Call';
import MockByCalls, { mockByCallsUsed } from '@chubbyjs/chubbyjs-mock/dist/MockByCalls';
test('example', () => {
class DateTimeService {
public format(date: Date, format: string): string {
return 'test';
}
}
const mockByCalls = new MockByCalls();
const dateTimeService = mockByCalls.create<DateTimeService>(DateTimeService, [
Call.create('format')
.with(new ArgumentInstanceOf(Date), 'c')
.willReturn('2004-02-12T15:19:21+00:00'),
Call.create('format')
.with(new ArgumentCallback((date: Date) => expect(date).toBeInstanceOf(Date)), 'c')
.willReturn('2008-05-23T08:12:55+00:00'),
]);
expect(dateTimeService.format(new Date(), 'c')).toBe('2004-02-12T15:19:21+00:00');
expect(dateTimeService.format(new Date(), 'c')).toBe('2008-05-23T08:12:55+00:00');
// if you want to be sure, that the mocked calls and the method call matches
expect(mockByCallsUsed(dateTimeService)).toBe(true);
});
```
### Mock an interface
```ts
import { expect, test } from '@jest/globals';
import ArgumentCallback from '@chubbyjs/chubbyjs-mock/dist/Argument/ArgumentCallback';
import ArgumentInstanceOf from '@chubbyjs/chubbyjs-mock/dist/Argument/ArgumentInstanceOf';
import Call from '@chubbyjs/chubbyjs-mock/dist/Call';
import MockByCalls, { mockByCallsUsed } from '@chubbyjs/chubbyjs-mock/dist/MockByCalls';
test('example', () => {
interface DateTimeServiceInterface {
format(date: Date, format: string): string;
}
const mockByCalls = new MockByCalls();
const dateTimeService = mockByCalls.create<DateTimeServiceInterface>(
class DateTimeService implements DateTimeServiceInterface {
format(date: Date, format: string): string {
return 'test';
}
},
[
Call.create('format')
.with(new ArgumentInstanceOf(Date), 'c')
.willReturn('2004-02-12T15:19:21+00:00'),
Call.create('format')
.with(new ArgumentCallback((date: Date) => expect(date).toBeInstanceOf(Date)), 'c')
.willReturn('2008-05-23T08:12:55+00:00'),
],
);
expect(dateTimeService.format(new Date(), 'c')).toBe('2004-02-12T15:19:21+00:00');
expect(dateTimeService.format(new Date(), 'c')).toBe('2008-05-23T08:12:55+00:00');
// if you want to be sure, that the mocked calls and the method call matches
expect(mockByCallsUsed(dateTimeService)).toBe(true);
});
```
### Mock a instantiable function
It's possible but it should not be done, cause to get it work there need to be plenty of ts-ignore.
```ts
import { expect, test } from '@jest/globals';
import ArgumentCallback from '@chubbyjs/chubbyjs-mock/dist/Argument/ArgumentCallback';
import ArgumentInstanceOf from '@chubbyjs/chubbyjs-mock/dist/Argument/ArgumentInstanceOf';
import Call from '@chubbyjs/chubbyjs-mock/dist/Call';
import MockByCalls, { mockByCallsUsed } from '@chubbyjs/chubbyjs-mock/dist/MockByCalls';
test('example', () => {
function DateTimeService() {
// @ts-ignore
this.format = (date: Date, format: string): string => {
return 'test';
};
}
const mockByCalls = new MockByCalls();
const dateTimeService = mockByCalls.create<typeof DateTimeService>(DateTimeService, [
Call.create('format')
.with(new ArgumentInstanceOf(Date), 'c')
.willReturn('2004-02-12T15:19:21+00:00'),
Call.create('format')
.with(new ArgumentCallback((date: Date) => expect(date).toBeInstanceOf(Date)), 'c')
.willReturn('2008-05-23T08:12:55+00:00'),
]);
// @ts-ignore
expect(dateTimeService.format(new Date(), 'c')).toBe('2004-02-12T15:19:21+00:00');
// @ts-ignore
expect(dateTimeService.format(new Date(), 'c')).toBe('2008-05-23T08:12:55+00:00');
// if you want to be sure, that the mocked calls and the method call matches
expect(mockByCallsUsed(dateTimeService)).toBe(true);
});
```
## Copyright
Dominik Zogg 2021
[1]: https://www.npmjs.com/package/@chubbyjs/chubbyjs-mock