UNPKG

@sentzunhat/zacatl

Version:

A modular, high-performance TypeScript microservice framework for Node.js, featuring layered architecture, dependency injection, and robust validation for building scalable APIs and distributed systems.

65 lines (48 loc) 2.02 kB
import { container } from "tsyringe"; import { AbstractArchitecture } from "../../../../src/micro-service/architecture"; class TestArchitecture extends AbstractArchitecture { public start(): void {} public testRegisterDependencies<T>(dependencies: Array<new () => T>): void { this.registerDependencies(dependencies); } public testRegisterAndStoreDependencies<T>( dependencies: Array<new () => T>, storage: Array<T> ): void { this.registerAndStoreDependencies(dependencies, storage); } } class DummyDependency { public value = "dummy"; } describe("AbstractArchitecture", () => { const testArch: TestArchitecture = new TestArchitecture(); describe("registerDependencies", () => { it("should register each dependency with the container", () => { const spyFunction = vi.spyOn(container, "register"); testArch.testRegisterDependencies([DummyDependency]); expect(spyFunction).toHaveBeenCalledTimes(1); expect(spyFunction).toHaveBeenCalledWith(DummyDependency.name, { useClass: DummyDependency, }); }); }); describe("registerAndStoreDependencies", () => { it("should register each dependency and store the resolved instance", () => { const storage: DummyDependency[] = []; const spyResolveFunction = vi.spyOn(container, "resolve"); const spyRegisterFunction = vi.spyOn(container, "register"); const dummyInstance = new DummyDependency(); spyResolveFunction.mockReturnValue(dummyInstance); testArch.testRegisterAndStoreDependencies([DummyDependency], storage); expect(spyRegisterFunction).toHaveBeenCalledTimes(1); expect(spyRegisterFunction).toHaveBeenCalledWith(DummyDependency.name, { useClass: DummyDependency, }); expect(spyResolveFunction).toHaveBeenCalledTimes(1); expect(spyResolveFunction).toHaveBeenCalledWith(DummyDependency.name); expect(storage).toHaveLength(1); expect(storage[0]).toBe(dummyInstance); }); }); });