Last active
March 6, 2020 07:49
-
-
Save AWolf81/e5a25ced70709ead0e16a49fa63b0ff1 to your computer and use it in GitHub Desktop.
Run Mocha.js tests with html reporter from CLI with JSDOM
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
var Mocha = require('mocha'), | |
fs = require('fs'), | |
path = require('path'); | |
const { JSDOM } = require('jsdom') | |
const dom = new JSDOM(`<html><body> | |
<div id="mocha"></div> | |
</body></html>`); | |
global.document = dom.window.document; | |
global.window = dom.window; | |
// mockCanvas code from https://github.com/jsdom/jsdom/issues/1782#issuecomment-337656878 | |
function mockCanvas (window) { | |
window.HTMLCanvasElement.prototype.getContext = function () { | |
return { | |
fillRect: function() {}, | |
clearRect: function(){}, | |
getImageData: function(x, y, w, h) { | |
return { | |
data: new Array(w*h*4) | |
}; | |
}, | |
putImageData: function() {}, | |
createImageData: function(){ return []}, | |
setTransform: function(){}, | |
drawImage: function(){}, | |
save: function(){}, | |
fillText: function(){}, | |
restore: function(){}, | |
beginPath: function(){}, | |
moveTo: function(){}, | |
lineTo: function(){}, | |
closePath: function(){}, | |
stroke: function(){}, | |
translate: function(){}, | |
scale: function(){}, | |
rotate: function(){}, | |
arc: function(){}, | |
fill: function(){}, | |
measureText: function(){ | |
return { width: 0 }; | |
}, | |
transform: function(){}, | |
rect: function(){}, | |
clip: function(){}, | |
}; | |
} | |
window.HTMLCanvasElement.prototype.toDataURL = function () { | |
return ""; | |
} | |
} | |
mockCanvas(global.window); | |
// Instantiate a Mocha instance. | |
var mocha = new Mocha({ | |
reporter: 'html' | |
}); | |
var testDir = './test' | |
// Add each .js file to the mocha instance | |
fs.readdirSync(testDir).filter(function(file) { | |
// Only keep the .js files | |
return file.substr(-3) === '.js'; | |
}).forEach(function(file) { | |
mocha.addFile( | |
path.join(testDir, file) | |
); | |
}); | |
// Run the tests. | |
mocha.run(function(failures) { | |
const resultHtml = global.document.getElementsByTagName('html')[0].outerHTML; | |
fs.writeFile('./result.html', resultHtml, function (err) { | |
if (err) throw err; | |
console.log('Saved html file!'); | |
}); | |
process.exitCode = failures ? 1 : 0; // exit with non-zero status if there were failures | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment