Skip to content

ynab/lightfoot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lightfoot

Run your own tests in a real browser with selenium then stream the results out. Uses leadfoot under the hood.

NPM

install

npm install lightfoot --save-dev

usage

Install and run a Selenium Server.

Add a test target to your scripts of your package.json:

{
  "name": "myapp",
  "version": "0.1.0",
  "scripts": {
    "test": "lightfoot --url=http://localhost:3000/test.html"
  },
  "devDependencies": {
    "lightfoot": "^1.0.0"
  }
}

Then run the command npm test to run your test URL in a real browser via selenium.

notifying lightfoot

Your test suite can communicate with lightfoot using a global variable stack: window.NOTIFY_LIGHTFOOT

When your tests are done, push an object to the stack:

window.NOTIFY_LIGHTFOOT.push({ type: 'done', passed: 2, failed: 1 })

An example adapter if you're using QUnit:

window.NOTIFY_LIGHTFOOT = []
function notifyLightfoot(type, payload) {
  payload.type = type
  window.NOTIFY_LIGHTFOOT.push(payload)
}
QUnit.begin(function(data) { notifyLightfoot('begin', data) })
QUnit.done(function(data) { notifyLightfoot('done', data) })
QUnit.testDone(function(data) { notifyLightfoot('testDone', data) })
QUnit.log(function(data) { notifyLightfoot('assertion', data) })

and now lightfoot will know and report more info about the lifecycle of your test suite.

api usage

// Create an instance of lightfoot
var lightfoot = require('lightfoot')({
  url: 'http://localhost:3000/test.html',
  browserName: 'firefox',
  varName: 'window.NOTIFY_LIGHTFOOT',
})

// Open a session and run the tests
lightfoot.run(function(code) {
  process.exit(code || 0)
})

// Pipe to built in tap reporter or your own reporter
lightfoot.pipe(require('lightfoot/reporters/tap')()).pipe(process.stdout)

running multiple sessions concurrently

There is a built in helper to run mutliple sessions concurrently:

var runAll = require('lightfoot').runAll
// Run each of these sessions with 2 at a time concurrently
runAll([
  { url: 'http://localhost:3000/test.html?module=one.js', browserName: 'chrome' },
  { url: 'http://localhost:3000/test.html?module=two.js', browserName: 'chrome' },
  { url: 'http://localhost:3000/test.html?module=one.js', browserName: 'firefox' },
  { url: 'http://localhost:3000/test.html?module=two.js', browserName: 'firefox' },
], 2, function(codes) {
  // Exit with the greatest exit code
  process.exit(codes.reduce(function(code, last) {
    return (code > last) ? code : last;
  }, 0))
})

using with sauce labs

Install and run Sauce Connect

Specify the Sauce Labs Selenium web driver URL with your username and access key:

require('lightfoot')({
  url: 'http://localhost:3000/test.html',
  seleniumUrl: 'http://username:[email protected]:80/wd/hub',
}).run(function(code) {
  process.exit(code || 0)
})

Now through all kinds of mad science, your tests served locally are ran in a real browser at Sauce Labs and reported to your terminal.

Release History

  • 1.6.1 - Fix for running a single test runner.
  • 1.6.0 - Add pollInterval option to delay how often we poll the console.
  • 1.5.0 - Rename log event to assertion. log is now used to track console.log messages in the browser.
  • 1.4.0 - Ability to specify capabilities. Helper for running multiple sessions concurrently. Pipe errors to reporter when they occur.
  • 1.3.1 - Add repository field to package.json. Ensure assertions on pretty reporter go on their own line.
  • 1.3.0 - Add pretty reporter
  • 1.2.1 - Avoid multiple done() calls on finish
  • 1.2.0 - Do not call quit() automatically any more to allow for async clean up. User must call quit()
  • 1.1.1 - Ensure quit is called before runCallback
  • 1.1.0 - Fixes to prevent runner from hanging. id is no longer required. Fixes to tap reporter. session and sessionId is exposed. quit is called upon the end automatically now.
  • 1.0.0 - Initial release

License

Copyright (c) 2014 YouNeedABudget.com Licensed under the MIT license.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published