Skip to content
main
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Floss

Unit-testing for those hard to reach places.

Node.js CI npm version

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 electron

Install locally within a project:

npm install floss electron --save-dev

Gulp 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:8080

Electron 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.js

Or installed locally:

node node_modules/.bin/floss --path test/index.js

Alernatively, 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 --debug

Istanbul Code Coverage

Floss supports nyc. To use it, just use floss as you would mocha:

nyc floss --path test/index.js

Mocha 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.xml

Electron Arguments

Supports passing additional arguments to Electron after --.

floss --path test/index.js -- --autoplay-policy=no-user-gesture-required

Custom 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/electron
ELECTRON_PATH=/usr/local/bin/electron floss --path test/index.js

GitHub 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 test

Travis 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
You can’t perform that action at this time.