🤖 nodetest
amadan.net/rastrillo/rastrillo/nodetest
Run a Node script from a Go test. Use it for JavaScript that has a Go twin or logic that needs no browser, such as a crypto envelope both languages must open or a date parser.
Node is a development tool here, not a dependency of your app. Anything that needs a real page still belongs in a browser test.
Node
const RequireEnv = "RASTRILLO_TEST_REQUIRE_NODE"
func Node(t testing.TB) string
Node returns the path to node. If there is none on your PATH, it
skips the test and names it, so you can see what went unchecked.
Set RASTRILLO_TEST_REQUIRE_NODE on CI. A missing node then fails the
test instead of skipping it, so the JavaScript checks cannot disappear
without anyone noticing. Rastrillo's own make ci sets it.
Run
type Cmd struct {
Args []string
Dir string
Stdin []byte
Env []string
Timeout time.Duration
}
const DefaultTimeout = 2 * time.Minute
func Run(t testing.TB, c Cmd) []byte
out := nodetest.Run(t, nodetest.Cmd{
Args: []string{"--test", "js/golden.test.mjs"},
Env: []string{"TZ=UTC"},
})
Run runs node with Args and returns what it wrote to stdout. Dir
is the working directory; leave it empty for the test's package
directory. Stdin is fed to the script. Env adds to the test's
environment, so name only what you change, such as TZ=UTC.
If node exits with an error, the test fails with both stdout and
stderr. node --test reports failures on stdout, and a crash lands on
stderr.
A script that has not finished after Timeout fails the test by name.
The default, DefaultTimeout, is two minutes.
Read this page as markdown — exact, unstyled, and cheap for an agent to fetch.