@gr2m/frontend-test-setup

reusable test setup for mocha, chai, browserify, webdriver, saucelabs & travis


Keywords
mocha, chai, browserify, webdriver, saucelabs, travis
License
MIT
Install
npm install @gr2m/frontend-test-setup@1.3.2

Documentation

frontend-test-setup

reusable test setup for mocha, chai, browserify, webdriver, saucelabs & travis

Build Status Dependency Status devDependency Status

Install

npm install --save @gr2m/frontend-test-setup

Usage

Add a "frontend-test-setup" key to your package.json

  "frontend-test-setup": {
    "server": {
      // path to static files
      "cwd": "demo",
      // browserify: path: module
      "browserify": {
        "/bundle.js": "demo/vendor.js",
        "/smartdate-input.js": "index.js"
      }
    }
    // see more options below
  }

Set your scripts to

  "scripts": {
    "start": "frontend-test-server",
    "test": "frontend-test-background mocha test/*.js",
  }

Replace mocha test/*.js in "test" with whatever your mocha test command.

You must require '@gr2m/frontend-test-setup' in your tests

require('@gr2m/frontend-test-setup')

describe('my demo page', function () {
  this.timeout(90000)

  it('loads successfully', function () {
    return this.client
      .url('/')
      .getTitle().should.eventually.equal('foo')
  })
})

frontend-test-setup plays nicely with Travis. If you want to test using selenium, make sure to only test in Firefox as it's the only supported browser, and add the following lines:

before_install:
  - export DISPLAY=:99.0
  - sh -e /etc/init.d/xvfb start

Set SAUCELABS_USERNAME & SAUCELABS_ACCESS_KEY as env variables, and test as many different browser configurations using the env.matrix setting, e.g.

env:
  matrix:
  - CLIENT=selenium:firefox
  - CLIENT=saucelabs:chrome
  - CLIENT="saucelabs:internet explorer:10:Windows 8"
  - CLIENT="saucelabs:iphone:8.4:OS X 10.11"

Options

frontend-test-setup can be configured in your package.json, simply add a "frontend-test-setup" with the options below. Options with a . delimiter are nested, e.g. log.level means log: {level: '...'}.

All settings in package.json can be overwritten using ENV variables, listed below the option name.

Setting (ENV) Default / Example
client
(CLIENT)

(saucelabs|selenium):browserName:browserVerion:platform, e.g. 'saucelabs:internet explorer:10:win10'
'selenium:chrome'
timeout
(TIMEOUT)

mocha test timeout in milli seconds
180000
log.level
(LOG_LEVEL)

one of the following: error, warn, info, verbose, silly
'error'
server.host
(SERVER_HOST)

hostname for test server
'0.0.0.0'
server.port
(SERVER_HOST)

port number for test server
8080
server.cwd

path from where to server static assets. If server.cmd is set, it runs the command in the given path (relative to repository’s root)
'.'
server.browserify

Map of assets to be browserified. The example below will browserify index.js and at http://<server.host>:<server.port>/my-lib.js</server>
"browserify": {
  "/my-lib.js": "index.js"
}
{}
server.cmd
(SERVER_CMD)

Command to start custom server
e.g. 'npm start'
selenium.hub
(SELENIUM_HUB)

Url to selenium hub
'http://localhost:4444/wd/hub/status'
saucelabs.username
(SAUCELABS_USERNAME)

Saucelabs username for authentication
e.g. 'pat'
saucelabs.accessKey
(SAUCELABS_ACCESS_KEY)

Saucelabs access key for authentication
e.g. 'abcd5678-1234-1234-1234-abcd5678abcd'
saucelabs.desiredCapabilities.idle-timeout
(SAUCELABS_IDLE_TIMEOUT)

SauceLabs Idle Test Timeout
90, allowed maximum is 1000
saucelabs.desiredCapabilities.max-duration
(SAUCELABS_MAX_DURATION)

SauceLabs Maximum Test Duration
1800, allowed maximum is 10800
saucelabs.desiredCapabilities.max-duration
(SAUCELABS_COMMAND_TIMEOUT)

SauceLabs Command Timeout
300, allowed maximum is 600

License

MIT