A very strict mocking library for class based objects.
- node: 12
Through NPM as @chubbyjs/chubbyjs-mock.
npm i @chubbyjs/[email protected]
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);
});
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);
});
It's possible but it should not be done, cause to get it work there need to be plenty of ts-ignore.
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);
});
Dominik Zogg 2021