settings.spec.ts 1.6 KB

123456789101112131415161718192021222324252627282930
  1. import { describe, expect, it } from 'vitest'
  2. import { build } from 'esbuild'
  3. import { execFile } from 'node:child_process'
  4. import { promisify } from 'node:util'
  5. import * as fs from 'node:fs'
  6. import * as path from 'node:path'
  7. import * as os from 'node:os'
  8. import { removeSync } from '../../core/src/repo/remove'
  9. import { linkFixtureDependencies } from '../../bundle/tests/fixtures/fixture-dependencies.mjs'
  10. describe('真实 DSH 设置与提供方生命周期', () => {
  11. it('可保存维度、隔离凭据、热更新配置并保持卸载重装等价', async () => {
  12. const root = fs.mkdtempSync(path.join(os.tmpdir(), 'webnovel-embedding-settings-'))
  13. const packageRoot = path.resolve(__dirname, '..')
  14. try {
  15. linkFixtureDependencies(packageRoot, root)
  16. const outfile = path.join(root, 'embedding.mjs')
  17. await build({ entryPoints: [path.join(packageRoot, 'src/index.ts')], outfile, platform: 'node', format: 'esm', bundle: true, target: 'node22', external: ['@deepseek-ai/cordis', '@deepseek-ai/dsh-llm', 'node:*'] })
  18. const result = await promisify(execFile)(process.execPath, [path.join(packageRoot, 'tests/fixtures/settings-host.mjs'), root, outfile], {
  19. cwd: root, windowsHide: true, timeout: 20_000,
  20. env: { ...process.env, DSH_HOME: path.join(root, '.dsh'), AGENTS_HOME: path.join(root, '.agents'), DSH_TELEMETRY_DISABLED: '1' },
  21. })
  22. expect(result.stdout).toContain('"dimensionsRequired":true')
  23. expect(result.stdout).toContain('"reloadPreservesSettings":true')
  24. expect(result.stderr).not.toContain('UNHANDLED')
  25. } finally {
  26. removeSync(root)
  27. }
  28. }, 25_000)
  29. })