Skip to content
This repository was archived by the owner on Aug 24, 2022. It is now read-only.

Commit 969b916

Browse files
author
Marco Ronchese
committed
Added Phantomjs + Jasmine test runner
1 parent fd5d014 commit 969b916

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

run-jasmine.js

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
var system = require('system');
2+
3+
/**
4+
* Wait until the test condition is true or a timeout occurs. Useful for waiting
5+
* on a server response or for a ui change (fadeIn, etc.) to occur.
6+
*
7+
* @param testFx javascript condition that evaluates to a boolean,
8+
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
9+
* as a callback function.
10+
* @param onReady what to do when testFx condition is fulfilled,
11+
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
12+
* as a callback function.
13+
* @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used.
14+
*/
15+
function waitFor(testFx, onReady, timeOutMillis) {
16+
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001, //< Default Max Timeout is 3s
17+
start = new Date().getTime(),
18+
condition = false,
19+
interval = setInterval(function() {
20+
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
21+
// If not time-out yet and condition not yet fulfilled
22+
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
23+
} else {
24+
if(!condition) {
25+
// If condition still not fulfilled (timeout but condition is 'false')
26+
console.log("'waitFor()' timeout");
27+
phantom.exit(1);
28+
} else {
29+
// Condition fulfilled (timeout and/or condition is 'true')
30+
console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
31+
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
32+
clearInterval(interval); //< Stop this interval
33+
}
34+
}
35+
}, 100); //< repeat check every 100ms
36+
};
37+
38+
39+
if (system.args.length !== 2) {
40+
console.log('Usage: run-jasmine.js URL');
41+
phantom.exit(1);
42+
}
43+
44+
var page = require('webpage').create();
45+
46+
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
47+
page.onConsoleMessage = function(msg) {
48+
console.log(msg);
49+
};
50+
51+
page.open(system.args[1], function(status){
52+
if (status !== "success") {
53+
console.log("Unable to open " + system.args[1]);
54+
phantom.exit(1);
55+
} else {
56+
console.log("Running " + system.args[1]);
57+
waitFor(function(){
58+
return page.evaluate(function(){
59+
return document.body.querySelector('.symbol-summary .pending') === null
60+
});
61+
}, function(){
62+
63+
var exitCode = page.evaluate(function(){
64+
try {
65+
var list = document.body.querySelectorAll('.results > .failures > .spec-detail.failed');
66+
if (list && list.length > 0) {
67+
console.log(list.length + ' test(s) FAILED:');
68+
for (i = 0; i < list.length; ++i) {
69+
var el = list[i],
70+
desc = el.querySelector('.description'),
71+
msg = el.querySelector('.result-message');
72+
console.log('');
73+
console.log(desc.innerText);
74+
console.log(msg.innerText);
75+
console.log('');
76+
}
77+
return 1;
78+
} else {
79+
console.log(document.body.querySelector('.passed.bar').innerText);
80+
return 0;
81+
}
82+
} catch (ex) {
83+
console.log(ex);
84+
return 1;
85+
}
86+
});
87+
88+
phantom.exit(exitCode);
89+
});
90+
}
91+
});

0 commit comments

Comments
 (0)