test-electron-main
v1.0.1
Published
Run node:test tests in an Electron main process
Readme
test-electron-main
CLI to run node:test tests in an Electron main process, with watch mode and TypeScript support. Not intended for UI tests (I'd recommend Playwright) but for unit tests that need to import things from electron.
Usage
Create a test/clipboard.js file:
import test from 'node:test'
import assert from 'node:assert'
import { clipboard } from 'electron'
test('read and write clipboard', function () {
clipboard.writeText('hello world')
assert.equal(clipboard.readText(), 'hello world')
})Run it:
$ test-electron-main test/* | tap-arc
Subtest: read and write clipboard
✓ read and write clipboard
total: 1
passing: 1The runner produces TAP output, which can be piped to a reporter of choice. In this example we're using the excellent tap-arc reporter.
Test files can be authored in JavaScript, TypeScript or both. They are imported through Vite 8 for full TypeScript support at near-native speed. Alternatively you could run your test files with electron itself, if they only use erasable TypeScript syntax (that Node.js and Electron can strip).
Install
With npm do:
npm install test-electron-main --save-devElectron is included in dependencies. Ideally you'd bring your own version but atm I need a different version for my own use - which happens to be the latest version (v42 at the time of writing). If that doesn't work for you, I can be persuaded, with chocolates or world peace.
CLI
test-electron-main [options] <glob pattern...>
One or more glob patterns are required; test-electron-main exits with a non-zero code if no tests are found. Negation patterns (e.g. !foo.js) are not supported.
Options:
--watchor-w: Rerun tests on changes and new files.--inspect=<port>: Let debuggers connect to the specified port. When set,test-electron-mainautomatically breaks on test files.--inspect-brk=<port>: Like inspect but pauses execution on startup. Once you've attached a debugger, hit Continue once to jump to your tests.--helpor-h: Show help message and exit.
