protractor-junit-flake
Version:
A wrapper for protractor to automatically re-run failed tests for a specific number of attempts
73 lines (59 loc) • 1.68 kB
JavaScript
/* eslint-disable no-console */
import { resolve } from 'path'
// we keep this es5 for easier interop with bin files
var express = require('express')
var app = express()
var fs = require('fs')
var FLAKE_FILE = resolve(__dirname, '/times-flaked')
var server = null
app.use(function logMiddleware (req, res, next) {
req.logger = function () {
if (app.get('log')) {
console.log.apply(console, arguments)
}
}
next()
})
app.get('/', function (req, res) {
res.send('<html><body><div id="home">Hello.</div></html></body>')
})
app.get('/flake/:timesToFlake', function (req, res, next) {
var timesToFlake = req.params.timesToFlake
fs.readFile(FLAKE_FILE, function (err, buffer) {
var timesFlaked
if (err && err.code === 'ENOENT') {
timesFlaked = 1
} else {
timesFlaked = parseInt(buffer.toString(), 10)
}
req.logger('Flaked', timesFlaked, '/', timesToFlake)
if (timesFlaked >= timesToFlake) {
res.send('<div id="success">Success!</div>')
} else {
fs.writeFile(FLAKE_FILE, timesFlaked + 1, { flag: 'w' }, function (err) {
if (err) {
return next(err)
}
res.status(400)
res.send('<div id="failure">Failure!</div>')
})
}
})
})
module.exports = {
listen: function (options, callback) {
options = options || {}
var port = options.port || '3000'
if (options.shouldLog) {
app.use(require('morgan')('combined'))
app.set('log', true)
}
server = app.listen(port, function () {
console.log('Test server listening at ', port)
if (callback) { callback() }
})
},
close: function () {
server.close()
}
}