Giter Club home page Giter Club logo

Logo

Automock

Automock optimizes the unit testing process within dependency injection frameworks by providing a virtual, isolated environment and automated mock generation, enabling developers to create efficient test suites and enhance their overall testing experience.

npm downloads npm downloads Codecov Coverage ci

↗️ Documentation    ↗️ API Reference

Core Features

🚀 Zero-Setup Mocking - Automatically generate mock objects, eliminate manual setup, reduce boilerplate code.

🔍 Type-Safe Mocks - Leverage TypeScript's power with mocks that retain the same type as real objects.

📄 Consistent Tests Structure - Test suites will follow a consistent syntax and structure, making them easier to read and maintain.

📈 Optimized Performance - By bypassing the actual DI container, unit tests run significantly faster.

🌐 Community & Support - Join a growing community of developers.

Quick Example

Take a look at the following example (using Jest, but the same applies for Sinon):

Consider the following UserService class:

export class Database {
  async getUsers(): Promise<User[]> { ... }
}

export class UserService {
  constructor(private database: Database) {}

  async getAllUsers(): Promise<User[]> {
    return this.database.getUsers();
  }
}

Let's create a unit test for this class using Automock:

import { TestBed } from '@automock/jest';
import { Database, UserService } from './user.service'; 

describe('User Service Unit Spec', () => {
  let userService: UserService; // 🧪 Declare the unit under test
  let database: jest.Mocked<Database>; // 🎭 Declare a mocked dependency

  beforeAll(() => {
    // 🚀 Create an isolated test env for the unit (under test) + auto generated mock objects
    const { unit, unitRef } = TestBed.create(UserService).compile(); 

    userService = unit;

    // 🔍 Retreive a dependency (mock) from the unit
    database = unitRef.get(Database);
  });

  // ✅ Test test test
  test('should return users from the database', async () => {
    const mockUsers: User[] = [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }];
    database.getUsers.mockResolvedValue(mockUsers);

    const users = await userService.getAllUsers();

    expect(database.getUsers).toHaveBeenCalled();
    expect(users).toEqual(mockUsers);
  });
});

With the use of the TestBed, an instance of the UserService class can be created with mock objects automatically generated for its dependencies. During the test, we have direct access to the automatically generated mock object for the Database dependency (database). By stubbing the getUsers() method of the database mock object, we can define its behavior and make sure it resolves with a specific set of mock users.

There is a lot more that Automock does rather than just generating mock objects, we recommend you to read the Getting Started guide to learn more.

↗️ For a full Step-by-Step example

📦 Installation

To fully integrate Automock into your testing and dependency injection framework, you'll need to install two packages: Automock package for your chosen testing framework, and the corresponding adapter for your DI framework.

  1. Install the corresponding package for your testing framework:
$ npm i -D @automock/jest

For Sinon:

$ npm i -D @automock/sinon
  1. And for your DI framework, install the appropriate Automock adapter (as a dev dependency):
DI Framework Package Name
NestJS @automock/adapters.nestjs
Inversify @automock/adapters.inversify

No further configuration is required.

📜 License

Distributed under the MIT License. See LICENSE for more information.

Automock's Projects

automock icon automock

Easier Unit Testing for TypeScript Dependency Injection Frameworks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.