返回 AiToEarn
config-editor.module.spec.ts
根目录 / project / aitoearn-backend / libs / config-editor / src / config-editor.module.spec.ts
1 import type { DynamicModule } from '@nestjs/common'
2 import { RouterModule } from '@nestjs/core/router'
3 import { describe, expect, it } from 'vitest'
4 import { z } from 'zod'
5 import { ConfigEditorConfig } from './config-editor.config'
6 import { ConfigEditorController } from './config-editor.controller'
7 import { ConfigEditorModule } from './config-editor.module'
8
9 describe('configEditorModule', () => {
10 it('使用 RouterModule 挂载配置前缀并用 class token 注入配置', () => {
11 const module = ConfigEditorModule.forRoot({
12 schema: z.object({ name: z.string() }),
13 config: {
14 meta: {
15 configPath: 'config.yaml',
16 },
17 },
18 routePrefix: '/open/config/',
19 })
20 const routerModule = module.imports?.[0] as DynamicModule
21 const routesProvider = routerModule.providers?.find(provider => typeof provider === 'object' && provider && 'useValue' in provider)
22 const configProvider = module.providers?.find(provider => typeof provider === 'object' && provider && 'provide' in provider && provider.provide === ConfigEditorConfig)
23
24 expect(module.controllers).toEqual([ConfigEditorController])
25 expect(routerModule.module).toBe(RouterModule)
26 expect(routesProvider).toMatchObject({
27 useValue: [{
28 path: 'open/config',
29 module: ConfigEditorModule,
30 }],
31 })
32 expect(configProvider).toMatchObject({
33 useValue: expect.objectContaining({
34 configPath: 'config.yaml',
35 routePrefix: 'open/config',
36 }),
37 })
38 })
39 })
40
40 lines TYPESCRIPT