Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kevcjones-archived/4503821 to your computer and use it in GitHub Desktop.
Save kevcjones-archived/4503821 to your computer and use it in GitHub Desktop.
Setting up Yeoman with Ember and Jasmine - Workaround needed Also adding a reporter for more output in the phantomJS console.
*I found Yeoman wanted to use Mocha regardsless of the --test-framework i passed in*
$ yeoman init ember
$ yeoman init jasmine:app --force
*Then edit the grunt.js*
//line 50 - replace mocha with jasmine...
mocha: {
all: ['test/**/*.html']
},
//line 175 - replace mocha with jasmine
grunt.registerTask('test', 'mocha');
*Finally a weird bug with window.phantom being undefined inside the /test/index.html boiler plate so you don't get the headless.js execution as you'd think you should...*
if(window.phantom) // undefined
changed that to
if (userAgent.indexOf('PhantomJS') != -1) //so that headless.js will call when appropiate.
I also then wanted more verbose reporting from Phantom-js so i took this (can't remember where from) reporter for console outputs on fails...
/**
Jasmine Reporter that outputs test results to the browser console.
Useful for running in a headless environment such as PhantomJs, ZombieJs etc.
Usage:
// From your html file that loads jasmine:
jasmine.getEnv().addReporter(new jasmine.ConsoleReporter());
jasmine.getEnv().execute();
*/
(function(jasmine, console) {
if (!jasmine) {
throw "jasmine library isn't loaded!";
}
var ANSI = {}
ANSI.color_map = {
"green" : 32,
"red" : 31
}
ANSI.colorize_text = function(text, color) {
var color_code = this.color_map[color];
return "\033[" + color_code + "m" + text + "\033[0m";
}
var ConsoleReporter = function() {
if (!console || !console.log) { throw "console isn't present!"; }
this.status = this.statuses.stopped;
};
var proto = ConsoleReporter.prototype;
proto.statuses = {
stopped : "stopped",
running : "running",
fail : "fail",
success : "success"
};
proto.reportRunnerStarting = function(runner) {
this.status = this.statuses.running;
this.start_time = (new Date()).getTime();
this.executed_specs = 0;
this.passed_specs = 0;
this.log("Starting...");
};
proto.reportRunnerResults = function(runner) {
var failed = this.executed_specs - this.passed_specs;
var spec_str = this.executed_specs + (this.executed_specs === 1 ? " spec, " : " specs, ");
var fail_str = failed + (failed === 1 ? " failure in " : " failures in ");
var color = (failed > 0)? "red" : "green";
var dur = (new Date()).getTime() - this.start_time;
this.log("");
this.log("Finished");
this.log("-----------------");
this.log(spec_str + fail_str + (dur/1000) + "s.", color);
this.status = (failed > 0)? this.statuses.fail : this.statuses.success;
/* Print something that signals that testing is over so that headless browsers
like PhantomJs know when to terminate. */
this.log("");
this.log("ConsoleReporter finished");
};
proto.reportSpecStarting = function(spec) {
this.executed_specs++;
};
proto.reportSpecResults = function(spec) {
if (spec.results().passed()) {
this.passed_specs++;
return;
}
var resultText = spec.suite.description + " : " + spec.description;
this.log(resultText, "red");
var items = spec.results().getItems()
for (var i = 0; i < items.length; i++) {
var trace = items[i].trace.stack || items[i].trace;
this.log(trace, "red");
}
};
proto.reportSuiteResults = function(suite) {
if (!suite.parentSuite) { return; }
var results = suite.results();
var failed = results.totalCount - results.passedCount;
var color = (failed > 0)? "red" : "green";
this.log(suite.getFullName() + ": " + results.passedCount + " of " + results.totalCount + " passed.", color);
};
proto.log = function(str, color) {
var text = (color != undefined)? ANSI.colorize_text(str, color) : str;
console.log(text)
};
jasmine.ConsoleReporter = ConsoleReporter;
})(jasmine, console);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment