remove.spec.ts 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. import { afterAll, describe, expect, it } from 'vitest'
  2. import * as fs from 'node:fs'
  3. import * as os from 'node:os'
  4. import * as path from 'node:path'
  5. import { removeSync } from '../src/repo/remove'
  6. const roots: string[] = []
  7. function mkRoot(): string {
  8. const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'webnovel-remove-'))
  9. roots.push(dir)
  10. return dir
  11. }
  12. afterAll(() => { for (const r of roots) { try { fs.rmSync(r, { recursive: true, force: true, maxRetries: 10, retryDelay: 200 }) } catch { /* Windows 句柄延迟释放,%TEMP% 残留无害 */ } } })
  13. describe('removeSync', () => {
  14. it('删除含中文路径的文件与目录,ENOENT 不抛', () => {
  15. const root = mkRoot()
  16. const dir = path.join(root, '记忆', '灵感')
  17. fs.mkdirSync(dir, { recursive: true })
  18. const file = path.join(dir, '纸条.md')
  19. fs.writeFileSync(file, '夜里忽然想到的金手指', 'utf-8')
  20. removeSync(file)
  21. expect(fs.existsSync(file)).toBe(false)
  22. removeSync(path.join(root, '记忆'))
  23. expect(fs.existsSync(path.join(root, '记忆'))).toBe(false)
  24. expect(() => removeSync(file)).not.toThrow()
  25. })
  26. })