ignore: document test fixtures for agents

This commit is contained in:
Dax Raad
2026-02-12 12:10:21 -05:00
parent ba54cee55e
commit 789705ea96

View File

@@ -0,0 +1,81 @@
# Test Fixtures Guide
## Temporary Directory Fixture
The `tmpdir` function in `fixture/fixture.ts` creates temporary directories for tests with automatic cleanup.
### Basic Usage
```typescript
import { tmpdir } from "./fixture/fixture"
test("example", async () => {
await using tmp = await tmpdir()
// tmp.path is the temp directory path
// automatically cleaned up when test ends
})
```
### Options
- `git?: boolean` - Initialize a git repo with a root commit
- `config?: Partial<Config.Info>` - Write an `opencode.json` config file
- `init?: (dir: string) => Promise<T>` - Custom setup function, returns value accessible as `tmp.extra`
- `dispose?: (dir: string) => Promise<T>` - Custom cleanup function
### Examples
**Git repository:**
```typescript
await using tmp = await tmpdir({ git: true })
```
**With config file:**
```typescript
await using tmp = await tmpdir({
config: { model: "test/model", username: "testuser" },
})
```
**Custom initialization (returns extra data):**
```typescript
await using tmp = await tmpdir<string>({
init: async (dir) => {
await Bun.write(path.join(dir, "file.txt"), "content")
return "extra data"
},
})
// Access extra data via tmp.extra
console.log(tmp.extra) // "extra data"
```
**With cleanup:**
```typescript
await using tmp = await tmpdir({
init: async (dir) => {
const specialDir = path.join(dir, "special")
await fs.mkdir(specialDir)
return specialDir
},
dispose: async (dir) => {
// Custom cleanup logic
await fs.rm(path.join(dir, "special"), { recursive: true })
},
})
```
### Returned Object
- `path: string` - Absolute path to the temp directory (realpath resolved)
- `extra: T` - Value returned by the `init` function
- `[Symbol.asyncDispose]` - Enables automatic cleanup via `await using`
### Notes
- Directories are created in the system temp folder with prefix `opencode-test-`
- Use `await using` for automatic cleanup when the variable goes out of scope
- Paths are sanitized to strip null bytes (defensive fix for CI environments)