Run your own tests in a real browser with selenium then stream the results out. Uses leadfoot under the hood.
npm install lightfoot --save-dev
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.
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.
// 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)
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))
})
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.
- 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 toassertion
.log
is now used to trackconsole.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 callquit()
- 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
Copyright (c) 2014 YouNeedABudget.com Licensed under the MIT license.