@peiyanlu/test-tools
v0.0.2
Published
Lightweight Node.js testing toolkit for isolated filesystem, Git, and setup lifecycle management.
Downloads
242
Readme
@peiyanlu/test-tools
Lightweight Node.js testing toolkit for isolated filesystem, Git, and setup lifecycle management.
Features
- 📁 Temporary file system utilities
- ⚙️ Process execution in isolated cwd
- 🧪 Git helpers for test scenarios
- 🧩 Setup lifecycle manager (multi-level)
- 📦 Temp directory utilities
- 🧹 Auto cleanup (Symbol.dispose support)
Installation
pnpm add -D @peiyanlu/test-toolsQuick Start
File + process tool
import { Tool } from '@peiyanlu/test-tools'
describe('Tool', () => {
let tool: Tool
let cwd: string
beforeEach(() => {
cwd = createTempDir()
tool = new Tool(cwd)
})
afterEach(() => {
tool.cleanup()
})
it('mkdirSync should create directory', () => {
tool.mkdirSync('a/b', { recursive: true })
expect(existsSync(resolve(cwd, 'a/b'))).toBe(true)
})
})Git tool
import { GitTool } from '@peiyanlu/test-tools'
describe('GitTool', () => {
let tool: GitTool
let cwd: string
beforeEach(() => {
cwd = createTempDir()
tool = new GitTool(cwd)
})
afterEach(() => {
tool.cleanup()
})
it('init should initialize repository', () => {
tool.init()
tool.writeFileSync('a.txt', 'hello')
tool.stage('.')
tool.commit('init')
const branch = tool.exec('git branch --show-current').trim()
expect(branch).toBe('master')
const log = tool.exec('git log -1 --pretty=%s').trim()
expect(log).toBe('init')
})
})Setup manager
import { SetupManager } from '@peiyanlu/test-tools'
const manager = new SetupManager()
manager.setSetup([
async (ctx) => {
ctx.ready = true
},
])
manager.setTeardown(async () => {
// cleanup logic
})
it('should execute setup functions in order', async () => {
const ctx = await manager.prepare(1)
expect(ctx.ready).toBe(true)
})Temp directory
import { createTempDir } from '@peiyanlu/test-tools'
const dir = createTempDir()Auto cleanup
using tool = new Tool(cwd)
// auto cleanup on scope exit
it('mkdirSync should create directory', () => {
const cwd = createTempDir()
using tool = new Tool(cwd)
tool.mkdirSync('a/b', { recursive: true })
expect(existsSync(resolve(cwd, 'a/b'))).toBe(true)
})Design
- Each tool is bound to an isolated
cwd - No global state
- Temporary directories are auto-generated
- SetupManager supports incremental setup levels
Use cases
- CLI testing
- Git workflow testing
- filesystem integration tests
- monorepo tooling tests
License
MIT
