mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { CoreContainer } from '../../src/core/structures/container'
|
|
import { CoreDependencies } from "../../src/core/ioc";
|
|
import { EventEmitter } from "events";
|
|
import { DefaultLogging, Init, Logging } from "../../src/core";
|
|
|
|
|
|
describe('ioc container', () => {
|
|
let container: CoreContainer<{}>;
|
|
let initDependency: Logging & Init;
|
|
beforeEach(() => {
|
|
initDependency = {
|
|
init: vi.fn(),
|
|
error(): void {},
|
|
warning(): void {},
|
|
info(): void {},
|
|
debug(): void {},
|
|
}
|
|
container = new CoreContainer()
|
|
|
|
})
|
|
|
|
it('should be ready after calling container.ready()', () => {
|
|
container.ready()
|
|
expect(container.isReady()).toBe(true)
|
|
})
|
|
it('should container all core dependencies', async () => {
|
|
const keys = ['@sern/modules', '@sern/emitter', '@sern/logger', '@sern/errors'] satisfies (keyof CoreDependencies)[]
|
|
container.add({
|
|
'@sern/logger': () => new DefaultLogging(),
|
|
'@sern/client': () => new EventEmitter(),
|
|
})
|
|
for(const k of keys) {
|
|
//@ts-expect-error typings for iti are strict
|
|
expect(() => container.get(k)).not.toThrow();
|
|
}
|
|
})
|
|
it('should init modules', () => {
|
|
container.upsert({ '@sern/logger': initDependency })
|
|
container.ready()
|
|
expect(initDependency.init).to.toHaveBeenCalledOnce()
|
|
})
|
|
|
|
it('should not lazy module', () => {
|
|
container.upsert({ '@sern/logger': () => initDependency })
|
|
container.ready()
|
|
expect(initDependency.init).toHaveBeenCalledTimes(0);
|
|
})
|
|
|
|
|
|
|
|
})
|