order |
---|
2 |
We'll now add tests with AVA to our previous esbuild example. See this repository for a complete example.
# Install ava as a dev dependency
$ npm install -D ava
Enable ES modules mode, and add a new test
script in package.json
:
---
filename: package.json
---
{
...,
"type": "module",
"scripts": {
...
"test": "npm run build && ava --verbose test/*.spec.js"
},
...
}
Create the following file containing our tests:
---
filename: test/index.spec.js
---
import test from "ava";
import { Miniflare } from "miniflare";
test.beforeEach((t) => {
// Create a new Miniflare environment for each test
const mf = new Miniflare({
// Autoload configuration from `.env`, `package.json` and `wrangler.toml`
envPath: true,
packagePath: true,
wranglerConfigPath: true,
// We don't want to rebuild our worker for each test, we're already doing
// it once before we run all tests in package.json, so disable it here.
// This will override the option in wrangler.toml.
buildCommand: undefined,
});
t.context = { mf };
});
test("increments path count for new paths", async (t) => {
// Get the Miniflare instance
const { mf } = t.context;
// Dispatch a fetch event to our worker
const res = await mf.dispatchFetch("http://localhost:8787/a");
// Check the count is "1" as this is the first time we've been to this path
t.is(await res.text(), "1");
});
You can run the tests with:
$ npm test
Let's try set an initial count in KV before we make our request to make sure our
worker works with existing counts. Add the following code to
test/index.spec.js
:
---
filename: test/index.spec.js
---
test("increments path count for existing paths", async (t) => {
// Get the Miniflare instance
const { mf } = t.context;
// Get the counter KV namespace
const ns = await mf.getKVNamespace("COUNTER_NAMESPACE");
// Set an initial count of 5
await ns.put("/a", "5");
// Dispatch a fetch event to our worker
const res = await mf.dispatchFetch("http://localhost:8787/a");
// Check returned count is now "6"
t.is(await res.text(), "6");
// Check KV count is now "6" too
t.is(await ns.get("/a"), "6");
});
For more examples of testing workers with AVA, Miniflare uses AVA for its own testing.