Floss
Unit-testing for those hard to reach places.
Uses Electron to provide a Mocha unit-testing environment which can be run headlessly or to debugged with DevTools. This was largely inspired by the electron-mocha and mocha-electron projects but didn't quite have the debugging features needed to develop tests.
Installation
Install globally:
npm install -g floss electronInstall locally within a project:
npm install floss electron --save-devGulp Usage
const floss = require('floss');
gulp.task('test', function(done) {
floss('test/index.js', done);
});Debug Mode
Open tests in an Electron window where test can can be debugged with debugger and dev tools.
floss({
path: 'test/index.js',
debug: true
}, done);Mocha Reporter
The reporter and reporterOptions are pass-through options for Mocha to specify a different reporter when running Floss in non-debug mode.
floss({
path: 'test/index.js',
reporter: 'xunit',
reporterOptions: {
filename: 'report.xml'
}
}, done);Custom Options
Additional properties can be passed to the test code by adding more values to the run options.
floss({
path: 'test/index.js',
customUrl: 'http://localhost:8080' // <- custom
}, done);The test code and use the global options property to have access to the run options.
console.log(options.customUrl); // logs: http://localhost:8080Electron Arguments
Commandline arguments can be passed to Electron directly by using args. In the example below, you may wan to disable Electron's user-gesture policy if you are testing HTML video or audio playback.
floss({
path: 'test/index.js',
args: ['--autoplay-policy=no-user-gesture-required']
}, done);Command Line Usage
Arguments
- --path or -p (String) Path to the file to test
- --debug or -d (Boolean) Enable to run in headful mode, default
false. - --quiet or -q (Boolean) Prevent console[log/info/error/warn/dir] messages from appearing in
stdout. - --electron or -e (String) Path to the electron to use.
- --reporter or -R (String) Mocha reporter type, default
spec. - --reporterOptions or -O (String) Mocha reporter options.
- -- [args] Additional arguments can be passed to Electron after
--
Usage
Command Line usage when installed globally:
floss --path test/index.jsOr installed locally:
node node_modules/.bin/floss --path test/index.jsAlernatively, within the package.json's' scripts:
{
"scripts": {
"test": "floss --path test/index.js"
}
}Debug Mode
Open tests in an Electron window where test can can be debugged with debugger and dev tools.
floss --path test/index.js --debugIstanbul Code Coverage
Floss supports nyc. To use it, just use floss as you would mocha:
nyc floss --path test/index.jsMocha Reporter
Can use the same reporter options as the API mentioned above. The reporterOptions are expressed as a querystring, for instance varname=foo&another=bar.
floss --path test/index.js \
--reporter=xunit \
--reporterOptions output=report.xmlElectron Arguments
Supports passing additional arguments to Electron after --.
floss --path test/index.js -- --autoplay-policy=no-user-gesture-requiredCustom Electron Version
Some application may require a specific version of Electron. Floss uses Electron 1.0.0+, but you can specific the path to your own version. The custom version can be used either through the commandline argument --electron, by setting the Node environmental variable ELECTRON_PATH or by setting the run option electron.
gulp.task('test', function(done) {
floss({
path: 'test/index.js',
electron: require('electron')
}, done);
});floss --path test/index.js \
--electron /usr/local/bin/electronELECTRON_PATH=/usr/local/bin/electron floss --path test/index.jsGitHub Actions Integration
name: Node.js CI
on:
push:
branches: [ '**' ]
tags: [ '**' ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12'
- run: npm install
- uses: GabrielBB/xvfb-action@v1.0
with:
run: npm testTravis Integration
Floss can be used with Travis CI to run Electron headlessly by utilizing Xvfb. Here's a sample of how to setup this project.
.travis.yml
language: node_js
node_js:
- "12"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
env:
- CXX=g++-4.8
services:
- xvfb
install:
- npm install
script:
- npm test