2 Fetch a mkws/jasmine based page into node.js, evaluate the page and check if test status
3 This should make it possible to run the test on the command line in jenkins. e.g.:
5 phantomjs evaluate.js https://mkws-dev.indexdata.com/jasmine-local-popup.html
8 var page = require('webpage').create(),
9 system = require('system');
11 if (system.args.length === 1) {
12 console.log('Usage: screenshot.js <some URL>');
15 var url = system.args[1];
17 var run_time = 8; // poll up to seconds
18 if (system.args[2] && parseFloat(system.args[2]) > 0) {
19 run_time = parseFloat(system.args[2]);
27 // 0: silent, 1: some infos, 2: display console.log() output
31 /************************/
33 function wait_for_jasmine(checkFx, readyFx, failFx, timeout) {
34 var max_timeout = timeout ? timeout : run_time * 1000,
35 start = new Date().getTime(),
36 result, condition = false;
38 var interval = setInterval(function () {
39 if (debug == 1) console.log(".");
43 // console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
44 result.time = (new Date().getTime() - start);
46 clearInterval(interval);
51 else if (new Date().getTime() - start >= max_timeout) {
52 result.time = (new Date().getTime() - start);
60 if (result) condition = result.mkws.jasmine_done;
63 }, 500); //< repeat check every N ms
66 // redirect webkit console.log() output
67 page.onConsoleMessage = function (message) {
68 if (debug >= 2) console.log(message);
72 page.onAlert = function (msg) {
73 console.log("Alert: " + msg);
77 page.open(url, function (status) {
78 if (debug >= 1) console.log("fetch " + url + " with status: " + status);
80 if (status != 'success') {
81 console.log("Failed to fetch page, give up");
85 if (debug >= 1) console.log("polling MKWS jasmine test status for " + run_time + " seconds");
88 var exit = wait_for_jasmine(function () {
89 return page.evaluate(function () {
90 if (!window || !window.$ || !window.mkws) {
95 html: window.$("html").html(),
96 duration: window.$(".duration").text(),
97 passing: window.$(".passingAlert").text()
104 if (debug < 1) return;
106 console.log("MKWS tests are successfully done in " + result.time / 1000 + " seconds. Hooray!");
107 console.log("jasmine duration: " + result.duration);
108 console.log("jasmine passing: " + result.passing);
112 var error_png = "./mkws-error.png";
113 var error_html = "./mkws-error.html";
115 console.log("MKWS tests failed after " + result.time / 1000 + " seconds");
116 console.log("keep screenshot in '" + error_png + "'");
117 page.render(error_png);
119 console.log("keep html DOM in '" + error_html + "'");
120 var html = result.html + "\n\n<!-- mkws: " + JSON.stringify(result.mkws) + " -->\n";
121 var fs = require('fs');
122 fs.write(error_html, html, "wb");