Created
January 10, 2013 17:03
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*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