TaskMake runAll async-aware (await fn()). Write test('resolves to 42', async () => { const v = await Promise.resolve(42); assert(v === 42) }) and test('rejects fails', async () => { await Promise.reject(new Error('boom')) }). Call await runAll(). Expect 1 pass + 1 fail.
Testing async code
125 XP9 min
Theory
Async tests need an async runner
Update the test runner to await the body. Tests can now be async functions and use await inside.
async function runAll() {
for (const { name, fn } of tests) {
try {
await fn();
console.log("PASS " + name);
} catch (err) {
console.log("FAIL " + name + " β " + err.message);
}
}
}Now you can:
test("fetches user", async () => {
const user = await loadUser(1);
assertEqual(user.name, "Anna", "user name");
});Forgetting await is the #1 async test bug
If you write test("x", () => { somePromise() }) without awaiting somePromise, the runner sees the test "pass" because the function returned without throwing. The Promise's rejection happens AFTER. Always await async work in tests.
π
Sign up to start coding
Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β card required, cancel anytime.
Sign up β free trial βFirst 10 lessons in each track are free. No card needed for those.