consoleLoggerMiddleware handles coverage logs
Thomas Aylott committed
Nov 15, 2013 at 16:29 UTC
ad0d9e476174ab72d6e8a2dc08e79bf0d3450a38
1 file changed
+38
-1
grunt/config/server.js
+38
-1
@@ -1,6 +1,42 @@
1
'use strict';
2
3
-module.exports = function(grunt) {
3
+module.exports = function(grunt){
4
+ var coverageWriteStream;
5
+
6
+ grunt.task.registerTask('finalize-coverage-stream', function(){
7
+ var done = this.async();
8
+ coverageWriteStream.once('close', done);
9
+ coverageWriteStream.end();
10
+ coverageWriteStream = null;
11
+ });
12
+
13
+ function consoleLoggerMiddleware(req, res, next) {
14
+ if (!(req.method == 'POST'
15
+ && req._parsedUrl.pathname.replace(/\//g,'') == 'console'
16
+ && Array.isArray(req.body))
17
+ ) {
18
+ return next();
19
+ }
20
+ res.write('<!doctype html><meta charset=utf-8>');
21
+ res.end('Got it, thanks!');
22
+
23
+ req.body.forEach(function(log){
24
+ if (log.message.indexOf('not ok ') === 0) log.type = 'error';
25
+ else if (log.message.indexOf('ok ') === 0) log.type = 'ok';
26
+ else if (log.message.indexOf('COVER') === 0) log.type = 'coverage';
27
+ else if (log.message.indexOf('DONE\t') === 0) log.type = 'coverage done';
28
+
29
+ if (log.type == 'error') grunt.log.error(log.message);
30
+ else if (log.type == 'ok') grunt.log.ok(log.message);
31
+ else if (log.type == 'log') grunt.log.writeln(log.message);
32
+ else if (log.type == 'coverage') {
33
+ if (!coverageWriteStream) coverageWriteStream = require('fs').createWriteStream(__dirname + '/../../coverage.log');
34
+ coverageWriteStream.write(log.message + '\n');
35
+ }
36
+ else if (log.type == 'coverage done') grunt.task.run('finalize-coverage-stream');
37
+ else grunt.verbose.writeln(log);
38
+ });
39
+ }
40
41
function testResultLoggerMiddleware(req, res, next) {
42
if (!(req.method == 'POST' && req._parsedUrl.pathname.indexOf('/reportTestResults') === 0)) {
@@ -41,6 +77,7 @@ module.exports = function(grunt) {
77
78
return [
79
connect.json(),
80
+ consoleLoggerMiddleware,
81
testResultLoggerMiddleware,
82
83
connect.logger({format:'[:user-agent][:timestamp] :method :url', stream:grunt.verbose}),