Skip to content

Commit

Permalink
Switch from PhantomJS to Karma + Chrome/Firefox for testing
Browse files Browse the repository at this point in the history
  • Loading branch information
mislav committed May 23, 2018
1 parent da07fa1 commit b539589
Show file tree
Hide file tree
Showing 6 changed files with 190 additions and 162 deletions.
6 changes: 6 additions & 0 deletions .travis.yml
Expand Up @@ -2,6 +2,12 @@ sudo: false
language: node_js
node_js:
- "node"
dist: trusty
addons:
chrome: stable
before_script:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
cache:
directories:
- phantomjs
Expand Down
1 change: 0 additions & 1 deletion Makefile
@@ -1,5 +1,4 @@
test: lint dist/fetch.umd.js
./script/test

lint: node_modules/
./node_modules/.bin/eslint --report-unused-disable-directives *.js test/*.js
Expand Down
13 changes: 9 additions & 4 deletions package.json
Expand Up @@ -8,11 +8,15 @@
"license": "MIT",
"devDependencies": {
"abortcontroller-polyfill": "^1.1.9",
"chai": "1.10.0",
"chai": "^4.1.2",
"eslint": "^4.19.1",
"eslint-plugin-github": "^1.0.0",
"mocha": "2.1.0",
"mocha-phantomjs-core": "2.0.1",
"karma": "^1.7.1",
"karma-chai": "^0.1.0",
"karma-chrome-launcher": "^2.2.0",
"karma-firefox-launcher": "^1.0.1",
"karma-mocha": "^1.3.0",
"mocha": "^4.0.1",
"promise-polyfill": "6.0.2",
"rollup": "^0.59.1",
"url-search-params": "0.6.1"
Expand All @@ -24,6 +28,7 @@
],
"scripts": {
"prepublish": "make dist/fetch.umd.js",
"test": "make"
"pretest": "make",
"test": "karma start ./test/karma.config.js"
}
}
157 changes: 0 additions & 157 deletions script/server

This file was deleted.

39 changes: 39 additions & 0 deletions test/karma.config.js
@@ -0,0 +1,39 @@
const serverEndpoints = require('./server')

module.exports = function(config) {
config.set({
frameworks: ['mocha', 'chai'],
client: {
mocha: {
ui: 'tdd'
}
},
files: ['../dist/fetch.umd.js', 'test.js'],
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
browsers: ['ChromeHeadlessNoSandbox', 'FirefoxHeadless'],
autoWatch: false,
singleRun: true,
concurrency: Infinity,
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: ['--no-sandbox']
},
FirefoxHeadless: {
base: 'Firefox',
flags: ['-headless'],
displayName: 'HeadlessFirefox'
}
},
beforeMiddleware: ['custom'],
plugins: [
'karma-*',
{
'middleware:custom': ['value', serverEndpoints]
}
]
})
}
136 changes: 136 additions & 0 deletions test/server.js
@@ -0,0 +1,136 @@
/* eslint-env node */

const url = require('url')
const querystring = require('querystring')

const routes = {
'/request': function(res, req) {
res.writeHead(200, {'Content-Type': 'application/json'})
var data = ''
req.on('data', function(c) {
data += c
})
req.on('end', function() {
res.end(
JSON.stringify({
method: req.method,
url: req.url,
headers: req.headers,
data: data
})
)
})
},
'/hello': function(res, req) {
res.writeHead(200, {
'Content-Type': 'text/plain',
'X-Request-URL': 'http://' + req.headers.host + req.url
})
res.end('hi')
},
'/hello/utf8': function(res) {
res.writeHead(200, {
'Content-Type': 'text/plain; charset=utf-8'
})
// "hello"
var buf = new Buffer([104, 101, 108, 108, 111])
res.end(buf)
},
'/hello/utf16le': function(res) {
res.writeHead(200, {
'Content-Type': 'text/plain; charset=utf-16le'
})
// "hello"
var buf = new Buffer([104, 0, 101, 0, 108, 0, 108, 0, 111, 0])
res.end(buf)
},
'/binary': function(res) {
res.writeHead(200, {'Content-Type': 'application/octet-stream'})
var buf = new Buffer(256)
for (var i = 0; i < 256; i++) {
buf[i] = i
}
res.end(buf)
},
'/redirect/301': function(res) {
res.writeHead(301, {Location: '/hello'})
res.end()
},
'/redirect/302': function(res) {
res.writeHead(302, {Location: '/hello'})
res.end()
},
'/redirect/303': function(res) {
res.writeHead(303, {Location: '/hello'})
res.end()
},
'/redirect/307': function(res) {
res.writeHead(307, {Location: '/hello'})
res.end()
},
'/redirect/308': function(res) {
res.writeHead(308, {Location: '/hello'})
res.end()
},
'/boom': function(res) {
res.writeHead(500, {'Content-Type': 'text/plain'})
res.end('boom')
},
'/empty': function(res) {
res.writeHead(204)
res.end()
},
'/slow': function(res) {
setTimeout(function() {
res.writeHead(200)
res.end()
}, 100)
},
'/error': function(res) {
res.destroy()
},
'/form': function(res) {
res.writeHead(200, {'Content-Type': 'application/x-www-form-urlencoded'})
res.end('number=1&space=one+two&empty=&encoded=a%2Bb&')
},
'/json': function(res) {
res.writeHead(200, {'Content-Type': 'application/json'})
res.end(JSON.stringify({name: 'Hubot', login: 'hubot'}))
},
'/json-error': function(res) {
res.writeHead(200, {'Content-Type': 'application/json'})
res.end('not json {')
},
'/cookie': function(res, req) {
var setCookie, cookie
var params = querystring.parse(url.parse(req.url).query)
if (params.name && params.value) {
setCookie = [params.name, params.value].join('=')
}
if (params.name) {
cookie = querystring.parse(req.headers['cookie'], '; ')[params.name]
}
res.writeHead(200, {
'Content-Type': 'text/plain',
'Set-Cookie': setCookie || ''
})
res.end(cookie)
},
'/headers': function(res) {
res.writeHead(200, {
Date: 'Mon, 13 Oct 2014 21:02:27 GMT',
'Content-Type': 'text/html; charset=utf-8'
})
res.end()
}
}

module.exports = function(req, res, next) {
const path = url.parse(req.url).pathname
const route = routes[path]
if (route) {
route(res, req)
} else {
next()
}
}

0 comments on commit b539589

Please sign in to comment.