Skip to content
This repository has been archived by the owner on Jul 10, 2022. It is now read-only.

A very strict mocking library for class based objects.

License

Notifications You must be signed in to change notification settings

chubbyjs-legacy/chubbyjs-mock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

chubbyjs-mock

CI Coverage Status Infection MSI

bugs code_smells coverage duplicated_lines_density ncloc sqale_rating alert_status reliability_rating security_rating sqale_index vulnerabilities

Description

A very strict mocking library for class based objects.

Requirements

  • node: 12

Installation

Through NPM as @chubbyjs/chubbyjs-mock.

npm i @chubbyjs/[email protected]

Usage

Mock a class

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

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.

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

About

A very strict mocking library for class based objects.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published