import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { defineServices } from '../../../script/initInterface' describe('defineServices', () => { const originalGlobalInfo = (window as any).globalInfo beforeEach(() => { delete (window as any).globalInfo }) afterEach(() => { if (originalGlobalInfo === undefined) { delete (window as any).globalInfo } else { ;(window as any).globalInfo = originalGlobalInfo } }) it('按构造函数名注册服务到 window.globalInfo.services', () => { class UserService { getList () { return ['a', 'b'] } } const service = new UserService() defineServices(service) expect((window as any).globalInfo).toBeDefined() expect((window as any).globalInfo.services.UserService).toBe(service) expect((window as any).globalInfo.services.UserService.getList()).toEqual(['a', 'b']) }) it('多次调用会在同一个 services 对象中累积注册', () => { class FirstService {} class SecondService {} const first = new FirstService() const second = new SecondService() defineServices(first) defineServices(second) expect((window as any).globalInfo.services.FirstService).toBe(first) expect((window as any).globalInfo.services.SecondService).toBe(second) }) it('同名构造函数再次注册时会覆盖旧实例', () => { class ReplaceableService { constructor (public id: number) {} } const first = new ReplaceableService(1) const second = new ReplaceableService(2) defineServices(first) defineServices(second) expect((window as any).globalInfo.services.ReplaceableService).toBe(second) expect((window as any).globalInfo.services.ReplaceableService.id).toBe(2) }) it('会把内部全局服务对象挂到 window.globalInfo 上', () => { class WindowService {} defineServices(new WindowService()) expect((window as any).globalInfo.services).toBeDefined() expect((window as any).globalInfo.services.WindowService).toBeInstanceOf(WindowService) }) })