Setup and teardown APIs
To make testing easier, you can use these APIs to help perform setup and teardown for test cases:
Deno.test.beforeAllDeno.test.beforeEachDeno.test.afterAllDeno.test.afterEach
Here’s a concrete example showing how to set up a test database:
import sqlite from "node:sqlite";import { assertEquals } from "jsr:@std/assert";
let testDb: sqlite.DatabaseSync;
// Run once before all testsDeno.test.beforeAll(() => { testDb = new sqlite.DatabaseSync(":memory:"); testDb.exec(`CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE ); `);});
// Run before each individual testDeno.test.beforeEach(() => { testDb.exec("DELETE FROM users"); const insert = testDb.prepare( "INSERT INTO users (name, email) VALUES (?, ?)", ); insert.run("Alice", "alice@example.com"); insert.run("Bob", "bob@example.com");});
// Run after each individual testDeno.test.afterEach(() => { // Clean up test data testDb.exec("DELETE FROM users");});
// Run once after all testsDeno.test.afterAll(() => { testDb.close();});
Deno.test("should find user by email", () => { const query = testDb.prepare("SELECT * FROM users WHERE email = ?"); const user = query.get("alice@example.com"); assertEquals(user?.name, "Alice");});
Deno.test("should create new user", () => { const insert = testDb.prepare( "INSERT INTO users (name, email) VALUES (?, ?)", ); insert.run("Charlie", "charlie@example.com");
const countQuery = testDb.prepare("SELECT COUNT(*) as count FROM users"); const result = countQuery.get(); assertEquals(result!.count, 3); // 2 from beforeEach + 1 new});