1
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-08-06 21:56:42 +02:00

run qunit tests in phantomjs for travis-ci

This commit is contained in:
Jacob Thornton
2012-04-19 17:34:07 -07:00
parent 1160935446
commit 03f78f7a60
7 changed files with 117 additions and 2 deletions

View File

@@ -11,6 +11,9 @@
<link rel="stylesheet" href="vendor/qunit.css" type="text/css" media="screen" />
<script src="vendor/qunit.js"></script>
<!-- phantomjs logging script-->
<script src="unit/bootstrap-phantom.js"></script>
<!-- plugin sources -->
<script src="../../js/bootstrap-transition.js"></script>
<script src="../../js/bootstrap-alert.js"></script>

65
js/tests/phantom.js Normal file
View File

@@ -0,0 +1,65 @@
/*
* Simple phantom.js integration script
* Adapted from Modernizr
*/
function waitFor(testFx, onReady, timeOutMillis) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001, //< Default Max Timout is 3s
start = new Date().getTime(),
condition = false,
interval = setInterval(function() {
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
// If not time-out yet and condition not yet fulfilled
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
} else {
if(!condition) {
// If condition still not fulfilled (timeout but condition is 'false')
console.log("'waitFor()' timeout");
phantom.exit(1);
} else {
// Condition fulfilled (timeout and/or condition is 'true')
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
clearInterval(interval); //< Stop this interval
}
}
}, 100); //< repeat check every 250ms
};
if (phantom.args.length === 0 || phantom.args.length > 2) {
console.log('Usage: phantom.js URL');
phantom.exit();
}
var page = new WebPage();
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.open(phantom.args[0], function(status){
if (status !== "success") {
console.log("Unable to access network");
phantom.exit();
} else {
waitFor(function(){
return page.evaluate(function(){
var el = document.getElementById('qunit-testresult');
if (el && el.innerText.match('completed')) {
return true;
}
return false;
});
}, function(){
var failedNum = page.evaluate(function(){
var el = document.getElementById('qunit-testresult');
try {
return el.getElementsByClassName('failed')[0].innerHTML;
} catch (e) { }
return 10000;
});
phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0);
});
}
});

18
js/tests/server.js Normal file
View File

@@ -0,0 +1,18 @@
/*
* Simple connect server for phantom.js
* Adapted from Modernizr
*/
var connect = require('connect')
, args = process.argv.slice(2)
, fs = require('fs')
, folder = '/../../'
, port = '3000'
var server = connect.createServer(
connect.static(__dirname + folder)
).listen(port)
fs.writeFileSync(__dirname + '/pid.txt', process.pid, 'utf-8')
console.log("Server started on port %s in %s", port, folder)

21
js/tests/unit/bootstrap-phantom.js vendored Normal file
View File

@@ -0,0 +1,21 @@
// Logging setup for phantom integration
// adapted from Modernizr
QUnit.begin = function() {
console.log("Starting test suite");
console.log("================================================\n");
};
QUnit.moduleDone = function(opts) {
if(opts.failed === 0) {
console.log("\u2714 All tests passed in '"+opts.name+"' module");
} else {
console.log("\u2716 "+ opts.failed +" tests failed in '"+opts.name+"' module");
}
};
QUnit.done = function(opts) {
console.log("\n================================================");
console.log("Tests completed in "+opts.runtime+" milliseconds");
console.log(opts.passed + " tests of "+opts.total+" passed, "+opts.failed+" failed.");
};