Skip to content

πŸŽ›οΈπŸ—‚οΈπŸ§  Mock D1 Database implementation for testing Cloudflare Workers

License

Notifications You must be signed in to change notification settings

variablesoftware/mock-d1

Repository files navigation

@variablesoftware/mock-d1 πŸŽ›οΈπŸ—‚οΈπŸ§ 

Test Suite NPM version License

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

yarn add --dev @variablesoftware/mock-d1

This package assumes a test environment with Vitest and support for ESM.


πŸš€ Usage

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:

yarn test

🚧 Status

This package is under active development and not yet stable.

Once stable, it will be published as:

"@variablesoftware/mock-d1": "^0.5.0"

πŸ“„ License

MIT Β© Rob Friedman / Variable Software


Built with ❀️ by @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

About

πŸŽ›οΈπŸ—‚οΈπŸ§  Mock D1 Database implementation for testing Cloudflare Workers

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •