NodeJS and Io.js

Solano CI supports testing NodeJS and io.js applications.

For a concrete sample of a NodeJS application on Solano CI, see Intern JS code testing stack on of our Example Repositories page. Contact support@solanolabs.com with any questions about NodeJS and io.js support.

Supported Versions and Patch Levels

Solano CI natively supports several versions of NodeJS. For the most up to date list of versions or for assistance with another version, please contact support@solanolabs.com.

  • node 0.6.18
  • node 0.8.19
  • node 0.10.18, 0.10.26, 0.10.31
  • node 0.12.3, 0.12.4
  • node 4.1.1, 4.2.1, 4.4.0
  • node 5.0.0, 5.9.0, 5.10.1
  • node 6.0.0, 6.1.0, 6.2.1, 6.3.1, 6.4.0 through 6.10.0
  • node 7.7.1

Note

npm install commands on versions of NodeJS earlier then 4.4 and 5.4 can intermittenly fail due to network connectivity issues.

Solano CI also supports several versions of io.js; note that later versions are now merged into nodejs:

  • iojs 2.5.0
  • iojs 3.0.0

Configuration

You configure your tests and their environment in a file called solano.yml. Note that by default you can only configure one of NodeJS (or io.js) at a time. If you rely on NodeJS, We recommend specifying a version explicitly to ensure a consistent build result.

The configuration file is in YAML and looks like this example:

nodejs:
  version: '5.10.1'
hooks:
  pre_setup: npm install
tests:
  - npm test

The solano.yml file should be in your repository at the root of the directory tree. The version of npm used by default is specific to each version of NodeJS specified, and is typically the version that was available when the version of NodeJS was released. To update npm during the build, you can install either the latest compatible version or a specific version:

hooks:
  pre_setup: npm install npm[@x.y.z] && npm install

A typical Bower installation and cache configuration:

nodejs:
  version: '5.10.1'
hooks:
  pre_setup: |
    set -e         # Exit on error
    npm install    # Next command presumes bower is in package.json
    bower install  # <repo-root>/node_modules/.bin is early in $PATH
# npm/bower specific cache settings
cache:
  key_paths:
    - package.json
    - bower.json
  save_paths:
    - REPO/node_modules
    - REPO/bower_components

A recent version of Yarn is installed on our workers. The solano.yml file in our express example repo demonstrates using yarn instead of npm to install packages and run tests, specifying appropriate cache paths, as well as how to install a specific version of yarn if so desired.

If you want to configure io.js, use a configuration like this one:

# NOTE: iojs and nodejs have merged; use nodejs for latest versions
nodejs: false
iojs:
  version: '3.0.0'
hooks:
  pre_setup: npm install
tests:
  - npm test

Test Commands

The tests key is followed by a list of tests. The simplest and most general way to configure a test is as a shell command. For example:

tests:
  - npm test    # Individual test command

Also it is possible to customize the test name displayed on a build report web page by providing a name key:

tests:
  - name: execute npm test command
    command: npm test

Detailed Test Results

For NodeJS test runners that can produce JUnit-compatible XML reports, our JUnit parser can provide detailed results if you annotate your test with the type: junit and specify where the report files are generated.

For example, the Mocha test runner can be configured to use mocha-junit-reporter to provide detailed test results:

tests:
  - name: Mocha Tests
    type: junit
    command: mocha test --reporter mocha-junit-reporter
    report_files:
      - ./test-results.xml

Note

node_modules/.bin is automatically included in $PATH

Punctuation and spacing is very meaningful to YAML. You can test it by parsing your YAML online or with import yaml; print yaml.load(foo) in Python.