Test Explorer


Click on the play button next to list items to run them.


  1. Fork this val

  2. Create new tests in any of vals (and export them) (see @pomdtr/example_test)

import { assertEquals } from "https://deno.land/std@0.216.0/assert/mod.ts"; import { Test } from "https://esm.town/v/<account>/test_explorer"; export const exampleTestSuccess = new Test(() => { assertEquals(1 + 1, 2); }); export const exampleTestFailure = new Test(() => { assertEquals(1 + 1, 3); });
  1. Go to https://<account>-test_explorer.web.val.run to run your test
    • click on the val name to go to the val the tests are originating from
    • click on the test name to run it

ℹ️ You probably want to protect your test explorer behind an authentication middleware like @pomdtr/basicAuth

Discovery mechanism

In order to define a test, the user need to import the Test class from https://val.town/v/<account>/Test. So we can use the api to search for vals containing the https://val.town/v/<account>/Test string to locate the vals containing tests.

Next, we need to extract the tests from the val exports. We use exported instanceof Test to filter them (at some point we will probably use static analysis for this).


  • persist test results in sqlite
  • Improve styling (help welcome ❤️)
  • View logs in a modal
  • Batch http requests
import { router } from "https://esm.town/v/pomdtr/test_explorer_router";
export { Test } from "https://esm.town/v/pomdtr/test";
export default router.fetch;
Val Town is a social website to write and deploy JavaScript.
Build APIs and schedule functions from your browser.
stevekrouse avatar


I find the passing or failing styles too subtle. Maybe make the whole line red or green? Or make the failing passing icons filled instead of outlined?

It'd also be cool if it showed you the error message and let you expand it to see the whole message

stevekrouse avatar

It also feels to me that it's missing a sense of time, ie when did the tests give me that result you're showing now?

March 3, 2024