mirror of
https://github.com/novnc/noVNC.git
synced 2026-05-30 17:09:38 +00:00
Previously, there would be a case where if your tests took too long to run, the casper test runner would only report on certain tests. This has been fixed.
103 lines
3.5 KiB
JavaScript
103 lines
3.5 KiB
JavaScript
var Spooky = require('spooky');
|
|
var path = require('path');
|
|
|
|
var phantom_path = require('phantomjs').path;
|
|
var casper_path = path.resolve(__dirname, 'node_modules/casperjs/bin/casperjs');
|
|
process.env.PHANTOMJS_EXECUTABLE = phantom_path;
|
|
var casper_opts = {
|
|
child: {
|
|
transport: 'http',
|
|
command: casper_path
|
|
},
|
|
casper: {
|
|
logLevel: 'debug',
|
|
verbose: true
|
|
}
|
|
};
|
|
|
|
var provide_emitter = function(file_paths) {
|
|
var spooky = new Spooky(casper_opts, function(err) {
|
|
if (err) {
|
|
if (err.stack) console.warn(err.stack);
|
|
else console.warn(err);
|
|
return;
|
|
}
|
|
spooky.start('about:blank');
|
|
|
|
file_paths.forEach(function(file_path, path_ind) {
|
|
spooky.thenOpen('file://'+file_path);
|
|
spooky.waitFor(function() {
|
|
return this.getGlobal('__mocha_done') === true;
|
|
},
|
|
[{ path_ind: path_ind }, function() {
|
|
var res_json = {
|
|
file_ind: path_ind
|
|
};
|
|
|
|
res_json.num_tests = this.evaluate(function() { return document.querySelectorAll('li.test').length; });
|
|
res_json.num_passes = this.evaluate(function() { return document.querySelectorAll('li.test.pass').length; });
|
|
res_json.num_fails = this.evaluate(function() { return document.querySelectorAll('li.test.fail').length; });
|
|
res_json.num_slow = this.evaluate(function() { return document.querySelectorAll('li.test.pass:not(.fast):not(.pending)').length; });
|
|
res_json.num_skipped = this.evaluate(function () { return document.querySelectorAll('li.test.pending').length; });
|
|
res_json.duration = this.evaluate(function() { return document.querySelector('li.duration em').textContent; });
|
|
|
|
res_json.suites = this.evaluate(function() {
|
|
var traverse_node = function(elem) {
|
|
var res;
|
|
if (elem.classList.contains('suite')) {
|
|
res = {
|
|
type: 'suite',
|
|
name: elem.querySelector('h1').textContent,
|
|
has_subfailures: elem.querySelectorAll('li.test.fail').length > 0,
|
|
};
|
|
|
|
var child_elems = elem.querySelector('ul').children;
|
|
res.children = Array.prototype.map.call(child_elems, traverse_node);
|
|
return res;
|
|
}
|
|
else {
|
|
var h2_content = elem.querySelector('h2').childNodes;
|
|
res = {
|
|
type: 'test',
|
|
text: h2_content[0].textContent,
|
|
};
|
|
|
|
if (elem.classList.contains('pass')) {
|
|
res.pass = true;
|
|
if (elem.classList.contains('pending')) {
|
|
res.slow = false;
|
|
res.skipped = true;
|
|
}
|
|
else {
|
|
res.slow = !elem.classList.contains('fast');
|
|
res.skipped = false;
|
|
res.duration = h2_content[1].textContent;
|
|
}
|
|
}
|
|
else {
|
|
res.error = elem.querySelector('pre.error').textContent;
|
|
}
|
|
|
|
return res;
|
|
}
|
|
};
|
|
var top_suites = document.querySelectorAll('#mocha-report > li.suite');
|
|
return Array.prototype.map.call(top_suites, traverse_node);
|
|
});
|
|
|
|
res_json.replay = this.evaluate(function() { return document.querySelector('a.replay').textContent; });
|
|
|
|
this.emit('test_ready', res_json);
|
|
}]);
|
|
});
|
|
spooky.run();
|
|
});
|
|
|
|
return spooky;
|
|
};
|
|
|
|
module.exports = {
|
|
provide_emitter: provide_emitter,
|
|
name: 'SpookyJS (CapserJS on PhantomJS)'
|
|
};
|