@variablesoftware/mock-d1
Version:
๐๏ธ๐๏ธ๐ง Mock D1 Database implementation for testing Cloudflare Workers
116 lines (77 loc) โข 3.89 kB
Markdown
# @variablesoftware/mock-d1 ๐๏ธ๐๏ธ๐ง
[](https://github.com/variablesoftware/mock-d1/actions)
[](https://www.npmjs.com/package/@variablesoftware/mock-d1)
[](https://github.com/variablesoftware/mock-d1/blob/main/LICENSE.txt)
[](https://coveralls.io/github/variablesoftware/mock-d1)
[](https://bundlephobia.com/package/@variablesoftware/mock-d1)
[](https://www.npmjs.com/package/@variablesoftware/mock-d1)
[](https://github.com/variablesoftware/mock-d1/pulls)
**Mock Cloudflare D1 Database for unit and integration testing**
๐๏ธ๐๏ธ๐ง `@variablesoftware/mock-d1` provides an in-memory simulation of Cloudflare's D1 SQLite-compatible database. It enables fast, isolated, and predictable testing of SQL-backed applications without relying on external services.
## ๐ง Installation
```bash
pnpm add --dev @variablesoftware/mock-d1
```
> This package assumes a test environment with [Vitest](https://vitest.dev/) and support for ESM.
## ๐ Usage
```ts
import { mockD1Database } from "@variablesoftware/mock-d1";
const db = mockD1Database({
sessions: [{ sub: "user-123", jti: "token-abc", created: Date.now() }],
});
const stmt = db.prepare("SELECT * FROM sessions WHERE sub = ?");
stmt.bind("user-123");
const result = await stmt.all();
console.log(result.results); // [{ sub: 'user-123', ... }]
```
## ๐ฏ Goals
- โ Match Cloudflare's behavior for testing real query flows
- ๐ Explicit mock factories preferred over static snapshots
- ๐ฆ Eventually compatible with service bindings
## โจ Features
- Fully in-memory, no persistent writes
- SQL-style `.prepare().bind().all()` and `.run()` flow
- Supports mock row injection
- Isolated per test run
- Compatible with Vitest and Hono-based Cloudflare Workers
- Logs via `@variablesoftware/logface`
- Supports simple `SELECT`, `INSERT`, `UPDATE`, and `DELETE` statements
- Optional `.dump()` method for snapshot inspection
- Returns results shaped like real Cloudflare `D1Result`
- **Does not coerce types or values** โ faithfully returns your stored inputs
- Strives for parity with Cloudflare D1 behavior while keeping mocks debuggable
## ๐งช Test Coverage
Tested using `vitest run`, with coverage for:
- The "butter churn" suite stress-tests `mockD1Database()` with randomized insert/select/delete operations to simulate real query volume
- Basic SELECT queries
- Parameter binding
- Return shape matching Cloudflare's `D1Result`
Run tests:
```bash
pnpm test
```
## ๐ง Status
**This package is under active development and not yet stable.**
Once stable, it will be published as:
```json
"@variablesoftware/mock-d1": "^0.5.0"
```
## ๐ License
MIT ยฉ Rob Friedman / Variable Software
> Built with โค๏ธ by [@variablesoftware](https://github.com/variablesoftware)
> Thank you for downloading and using this project. Pull requests are warmly welcomed!
## ๐ Inclusive & Accessible Design
- Naming, logging, error messages, and tests avoid cultural or ableist bias
- Avoids assumptions about input/output formats or encodings
- Faithfully reflects user data โ no coercion or silent transformations
- Designed for clarity, predictability, and parity with underlying platforms (e.g., Cloudflare APIs)
- Works well in diverse, multilingual, and inclusive developer environments