Files
cv-cat dc078b248b catbus:一个命令操作小红书、抖音、TikTok、B 站、快手、微博、闲鱼、淘宝、京东、X
10 个平台的 web 端全部用 TypeScript 移植自 cv-cat 的开源项目,请求与上游逐字节对拍。
统一的命令语法与 JSON 输出、按 平台 × 端 × 账号 隔离的登录态、给 AI Agent 用的技能与 llms.txt。
2026-10-06 19:24:55 +08:00

51 lines
1.5 KiB
TypeScript

import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, beforeEach, vi } from 'vitest'
import { run } from '../src/cli/dispatch.js'
/** 每个测试一个临时的 CATBUS_HOME。 */
export function useTempHome(): { readonly dir: string } {
const state = { dir: '' }
let previous: string | undefined
beforeEach(() => {
previous = process.env.CATBUS_HOME
state.dir = mkdtempSync(join(tmpdir(), 'catbus-test-'))
process.env.CATBUS_HOME = state.dir
})
afterEach(() => {
if (previous === undefined) delete process.env.CATBUS_HOME
else process.env.CATBUS_HOME = previous
rmSync(state.dir, { recursive: true, force: true })
})
return state
}
export interface CliResult {
code: number
stdout: string
stderr: string
/** stdout 上的信封(json 格式)。 */
env: any
}
/** 在进程内执行一次 catbus,捕获 stdout / stderr。 */
export async function cli(...argv: string[]): Promise<CliResult> {
const out: string[] = []
const err: string[] = []
const o = vi.spyOn(process.stdout, 'write').mockImplementation((s) => (out.push(String(s)), true))
const e = vi.spyOn(process.stderr, 'write').mockImplementation((s) => (err.push(String(s)), true))
try {
const code = await run(argv)
const stdout = out.join('')
let env: any = null
try {
env = JSON.parse(stdout)
} catch {}
return { code, stdout, stderr: err.join(''), env }
} finally {
o.mockRestore()
e.mockRestore()
}
}