public
Last active

JSHint spec for use w/ jasmine-maven-plugin (where vendor sources are in a folder called 'vendor' and excluded).

  • Download Gist
jshint-spec.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
describe('JSHint', function() {
var options = {
curly : true,
white : false,
evil: true,
indent : 2
}, excludes = /^.*\/vendor\/.*$/, includes = /^.*js$/;
 
function get(path) {
path = path + "?" + new Date().getTime();
 
var xhr;
try {
xhr = new jasmine.XmlHttpRequest();
xhr.open("GET", path, false);
xhr.send(null);
} catch (e) {
throw new Error("couldn't fetch " + path + ": " + e);
}
if (xhr.status < 200 || xhr.status > 299) {
throw new Error("Could not load '" + path + "'.");
}
 
return xhr.responseText;
}
 
_.each(document.getElementsByTagName('script'), function(element) {
var script = element.getAttribute('src');
if (!includes.test(script) || excludes.test(script)) {
return;
}
 
var source;
 
try {
source = get(script);
} catch (e) {
//Oh well. Probably an XMLHttpRequest same-origin policy violation
}
 
if (source !== undefined) {
it(script, function() {
var self = this;
var result = JSHINT(source, options);
_.each(JSHINT.errors, function(error) {
self.addMatcherResult(new jasmine.ExpectationResult({
passed: false,
message: "line " + error.line + ' - ' + error.reason + ' - ' + error.evidence
}));
});
expect(true).toBe(true); // force spec to show up if there are no errors
});
}
 
});
});

Credit where it's due, I adapted this from @bkeepers site. http://opensoul.org/blog/archives/2011/02/19/jslint-and-jasmine/

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.