1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import { describe, expect, it, vi } from "vitest"
- import { TestContainer } from "../lib/testing"
- import { Service } from "../lib/service"
- import { ContainerEvent } from "../lib/container"
- class TestServiceA extends Service {
- public static ID = "TestServiceA"
- public test() {
- return "real"
- }
- }
- class TestServiceB extends Service {
- public static ID = "TestServiceB"
- // declared public to help with testing
- public readonly serviceA = this.bind(TestServiceA)
- public test() {
- return this.serviceA.test()
- }
- }
- describe("TestContainer", () => {
- describe("bindMock", () => {
- it("returns the fake service defined", () => {
- const container = new TestContainer()
- const fakeService = {
- test: () => "fake",
- }
- const result = container.bindMock(TestServiceA, fakeService)
- expect(result).toBe(fakeService)
- })
- it("new services bound to the container get the mock service", () => {
- const container = new TestContainer()
- const fakeServiceA = {
- test: () => "fake",
- }
- container.bindMock(TestServiceA, fakeServiceA)
- const serviceB = container.bind(TestServiceB)
- expect(serviceB.serviceA).toBe(fakeServiceA)
- })
- it("container emits SERVICE_BIND event", () => {
- const container = new TestContainer()
- const fakeServiceA = {
- test: () => "fake",
- }
- const serviceFunc = vi.fn<[ContainerEvent, void]>()
- container.getEventStream().subscribe((ev) => {
- serviceFunc(ev)
- })
- container.bindMock(TestServiceA, fakeServiceA)
- expect(serviceFunc).toHaveBeenCalledOnce()
- expect(serviceFunc).toHaveBeenCalledWith(<ContainerEvent>{
- type: "SERVICE_BIND",
- boundeeID: TestServiceA.ID,
- bounderID: undefined,
- })
- })
- it("throws if service already bound", () => {
- const container = new TestContainer()
- const fakeServiceA = {
- test: () => "fake",
- }
- container.bindMock(TestServiceA, fakeServiceA)
- expect(() => {
- container.bindMock(TestServiceA, fakeServiceA)
- }).toThrowError(
- "Service 'TestServiceA' already bound to container. Did you already call bindMock on this ?"
- )
- })
- })
- })
|