Use Mocha to make tests more reliable
This commit is contained in:
parent
2e4721ea1f
commit
5f945d4856
|
@ -37,7 +37,7 @@
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint '**/*.js'",
|
"lint": "eslint '**/*.js'",
|
||||||
"test:js": "node test/test.js",
|
"test:js": "mocha test/test.js test/lru-cache.js",
|
||||||
"test": "npm run lint && npm run test:js"
|
"test": "npm run lint && npm run test:js"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
|
@ -55,6 +55,7 @@
|
||||||
"logo"
|
"logo"
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^3.18.0"
|
"eslint": "^3.18.0",
|
||||||
|
"mocha": "^3.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
var LRU = require('../lib/lru-cache.js');
|
var LRU = require('../lib/lru-cache.js');
|
||||||
module.exports = [
|
|
||||||
["should support being called without new", function(done, assert) {
|
describe('The LRU cache', function () {
|
||||||
|
|
||||||
|
it("should support being called without new", function() {
|
||||||
var cache = LRU(1);
|
var cache = LRU(1);
|
||||||
assert(cache instanceof LRU);
|
assert(cache instanceof LRU);
|
||||||
done();
|
});
|
||||||
}],
|
|
||||||
["should support a zero capacity", function(done, assert) {
|
it("should support a zero capacity", function() {
|
||||||
var cache = new LRU(0);
|
var cache = new LRU(0);
|
||||||
cache.set('key', 'value');
|
cache.set('key', 'value');
|
||||||
assert.equal(cache.cache.size, 0);
|
assert.equal(cache.cache.size, 0);
|
||||||
done();
|
});
|
||||||
}],
|
|
||||||
["should support a one capacity", function(done, assert) {
|
it("should support a one capacity", function() {
|
||||||
var cache = new LRU(1);
|
var cache = new LRU(1);
|
||||||
cache.set('key1', 'value1');
|
cache.set('key1', 'value1');
|
||||||
assert.equal(cache.cache.size, 1);
|
assert.equal(cache.cache.size, 1);
|
||||||
|
@ -23,10 +27,9 @@ module.exports = [
|
||||||
assert.equal(cache.oldest, cache.cache.get('key2'));
|
assert.equal(cache.oldest, cache.cache.get('key2'));
|
||||||
assert.equal(cache.get('key1'), undefined);
|
assert.equal(cache.get('key1'), undefined);
|
||||||
assert.equal(cache.get('key2'), 'value2');
|
assert.equal(cache.get('key2'), 'value2');
|
||||||
done();
|
});
|
||||||
}],
|
|
||||||
["should remove the oldest element when reaching capacity",
|
it("should remove the oldest element when reaching capacity", function() {
|
||||||
function(done, assert) {
|
|
||||||
var cache = new LRU(2);
|
var cache = new LRU(2);
|
||||||
cache.set('key1', 'value1');
|
cache.set('key1', 'value1');
|
||||||
cache.set('key2', 'value2');
|
cache.set('key2', 'value2');
|
||||||
|
@ -45,10 +48,9 @@ module.exports = [
|
||||||
assert.equal(cache.get('key1'), undefined);
|
assert.equal(cache.get('key1'), undefined);
|
||||||
assert.equal(cache.get('key2'), 'value2');
|
assert.equal(cache.get('key2'), 'value2');
|
||||||
assert.equal(cache.get('key3'), 'value3');
|
assert.equal(cache.get('key3'), 'value3');
|
||||||
done();
|
});
|
||||||
}],
|
|
||||||
["should make sure that resetting a key in cache makes it newest",
|
it("should make sure that resetting a key in cache makes it newest", function() {
|
||||||
function(done, assert) {
|
|
||||||
var cache = new LRU(2);
|
var cache = new LRU(2);
|
||||||
cache.set('key', 'value');
|
cache.set('key', 'value');
|
||||||
cache.set('key2', 'value2');
|
cache.set('key2', 'value2');
|
||||||
|
@ -57,10 +59,9 @@ module.exports = [
|
||||||
cache.set('key', 'value');
|
cache.set('key', 'value');
|
||||||
assert.equal(cache.oldest, cache.cache.get('key2'));
|
assert.equal(cache.oldest, cache.cache.get('key2'));
|
||||||
assert.equal(cache.newest, cache.cache.get('key'));
|
assert.equal(cache.newest, cache.cache.get('key'));
|
||||||
done();
|
});
|
||||||
}],
|
|
||||||
["should make sure that getting a key in cache makes it newest",
|
it("should make sure that getting a key in cache makes it newest", function() {
|
||||||
function(done, assert) {
|
|
||||||
var slot1, slot2, slot3;
|
var slot1, slot2, slot3;
|
||||||
|
|
||||||
// When the key is oldest.
|
// When the key is oldest.
|
||||||
|
@ -134,6 +135,6 @@ module.exports = [
|
||||||
assert.equal(slot3.newer, slot2);
|
assert.equal(slot3.newer, slot2);
|
||||||
assert.equal(slot2.older, slot3);
|
assert.equal(slot2.older, slot3);
|
||||||
assert.equal(slot2.newer, null);
|
assert.equal(slot2.newer, null);
|
||||||
done();
|
});
|
||||||
}],
|
|
||||||
];
|
});
|
||||||
|
|
91
test/test.js
91
test/test.js
|
@ -1,45 +1,16 @@
|
||||||
var assertion = require('assert');
|
var assert = require('assert');
|
||||||
var http = require('http');
|
var http = require('http');
|
||||||
var cproc = require('child_process');
|
var cproc = require('child_process');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
|
||||||
function test(target, tests) {
|
|
||||||
var wrappedTests = tests.map(function(test) {
|
|
||||||
return function() {
|
|
||||||
var desc = test[0];
|
|
||||||
var f = test[1];
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
var assert = function(pred, msg) { assert.ok(pred, msg); };
|
|
||||||
['ok', 'equal', 'deepEqual', 'strictEqual', 'deepStrictEqual',
|
|
||||||
'notEqual', 'notDeepEqual', 'notStrictEqual', 'notDeepStrictEqual',
|
|
||||||
'fail', 'doesNotThrow', 'throws',
|
|
||||||
].forEach(function(k) {
|
|
||||||
assert[k] = function(...args) {
|
|
||||||
try {
|
|
||||||
assertion[k].apply(null, args);
|
|
||||||
} catch(e) { reject(e); }
|
|
||||||
};
|
|
||||||
});
|
|
||||||
f(resolve, assert);
|
|
||||||
}).catch(function(e) {
|
|
||||||
console.error('Failed:', target + ' ' + desc + '\n', e.stack);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
});
|
|
||||||
var prom = wrappedTests[0]();
|
|
||||||
for (var i = 1; i < wrappedTests.length; i++) {
|
|
||||||
prom = prom.then(wrappedTests[i]);
|
|
||||||
}
|
|
||||||
return prom;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test parameters
|
// Test parameters
|
||||||
var port = '1111';
|
var port = '1111';
|
||||||
var url = 'http://127.0.0.1:' + port + '/';
|
var url = 'http://127.0.0.1:' + port + '/';
|
||||||
var server;
|
var server;
|
||||||
|
|
||||||
test('The CLI', [
|
describe('The CLI', function () {
|
||||||
['should provide a help message', function(done, assert) {
|
|
||||||
|
it('should provide a help message', function(done) {
|
||||||
var child = cproc.spawn('node', ['test/cli-test.js']);
|
var child = cproc.spawn('node', ['test/cli-test.js']);
|
||||||
var buffer = '';
|
var buffer = '';
|
||||||
child.stdout.on('data', function(chunk) {
|
child.stdout.on('data', function(chunk) {
|
||||||
|
@ -49,8 +20,9 @@ test('The CLI', [
|
||||||
assert(buffer.startsWith('Usage'));
|
assert(buffer.startsWith('Usage'));
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}],
|
});
|
||||||
['should produce default badges', function(done, assert) {
|
|
||||||
|
it('should produce default badges', function(done) {
|
||||||
var child = cproc.spawn('node',
|
var child = cproc.spawn('node',
|
||||||
['test/cli-test.js', 'cactus', 'grown']);
|
['test/cli-test.js', 'cactus', 'grown']);
|
||||||
child.stdout.on('data', function(chunk) {
|
child.stdout.on('data', function(chunk) {
|
||||||
|
@ -60,8 +32,9 @@ test('The CLI', [
|
||||||
assert(buffer.includes('grown'), 'grown');
|
assert(buffer.includes('grown'), 'grown');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}],
|
});
|
||||||
['should produce colorschemed badges', function(done, assert) {
|
|
||||||
|
it('should produce colorschemed badges', function(done) {
|
||||||
var child = cproc.spawn('node',
|
var child = cproc.spawn('node',
|
||||||
['test/cli-test.js', 'cactus', 'grown', ':green']);
|
['test/cli-test.js', 'cactus', 'grown', ':green']);
|
||||||
child.stdout.on('data', function(chunk) {
|
child.stdout.on('data', function(chunk) {
|
||||||
|
@ -69,17 +42,19 @@ test('The CLI', [
|
||||||
assert(buffer.startsWith('<svg'), '<svg');
|
assert(buffer.startsWith('<svg'), '<svg');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}],
|
});
|
||||||
['should produce right-color badges', function(done, assert) {
|
|
||||||
var child = cproc.spawn('node',
|
it('should produce right-color badges', function(done) {
|
||||||
|
child = cproc.spawn('node',
|
||||||
['test/cli-test.js', 'cactus', 'grown', '#abcdef']);
|
['test/cli-test.js', 'cactus', 'grown', '#abcdef']);
|
||||||
child.stdout.on('data', function(chunk) {
|
child.stdout.on('data', function(chunk) {
|
||||||
var buffer = ''+chunk;
|
var buffer = ''+chunk;
|
||||||
assert(buffer.includes('#abcdef'), '#abcdef');
|
assert(buffer.includes('#abcdef'), '#abcdef');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}],
|
});
|
||||||
['should produce PNG badges', function(done, assert) {
|
|
||||||
|
it('should produce PNG badges', function(done) {
|
||||||
var child = cproc.spawn('node',
|
var child = cproc.spawn('node',
|
||||||
['test/cli-test.js', 'cactus', 'grown', '.png']);
|
['test/cli-test.js', 'cactus', 'grown', '.png']);
|
||||||
child.stdout.on('data', function(chunk) {
|
child.stdout.on('data', function(chunk) {
|
||||||
|
@ -94,21 +69,22 @@ test('The CLI', [
|
||||||
assert.equal(chunk[7], 0x0a);
|
assert.equal(chunk[7], 0x0a);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}],
|
});
|
||||||
])
|
|
||||||
|
|
||||||
.then(function() {
|
});
|
||||||
test('The server', [
|
|
||||||
// Start running the server.
|
describe('The server', function () {
|
||||||
['should start', function(done, assert) {
|
|
||||||
|
before('Start running the server', function(done) {
|
||||||
server = cproc.spawn('node', ['test/server-test.js', port]);
|
server = cproc.spawn('node', ['test/server-test.js', port]);
|
||||||
var isDone = false;
|
var isDone = false;
|
||||||
server.stdout.on('data', function(data) {
|
server.stdout.on('data', function(data) {
|
||||||
if (data.toString().indexOf('ready') >= 0 && !isDone) { done(); isDone = true; }
|
if (data.toString().indexOf('ready') >= 0 && !isDone) { done(); isDone = true; }
|
||||||
});
|
});
|
||||||
server.stderr.on('data', function(data) { console.log(''+data); });
|
server.stderr.on('data', function(data) { console.log(''+data); });
|
||||||
}],
|
});
|
||||||
['should produce colorscheme badges', function(done, assert) {
|
|
||||||
|
it('should produce colorscheme badges', function(done) {
|
||||||
http.get(url + ':fruit-apple-green.svg',
|
http.get(url + ':fruit-apple-green.svg',
|
||||||
function(res) {
|
function(res) {
|
||||||
var buffer = '';
|
var buffer = '';
|
||||||
|
@ -120,8 +96,9 @@ test('The server', [
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}],
|
});
|
||||||
['should produce colorscheme PNG badges', function(done, assert) {
|
|
||||||
|
it('should produce colorscheme PNG badges', function(done) {
|
||||||
http.get(url + ':fruit-apple-green.png',
|
http.get(url + ':fruit-apple-green.png',
|
||||||
function(res) {
|
function(res) {
|
||||||
res.on('data', function(chunk) {
|
res.on('data', function(chunk) {
|
||||||
|
@ -137,11 +114,11 @@ test('The server', [
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}],
|
});
|
||||||
['should shut down', function(done, assert) {
|
|
||||||
|
after('Shut down the server', function(done) {
|
||||||
server.kill();
|
server.kill();
|
||||||
server.on('exit', function() { done(); });
|
server.on('exit', function() { done(); });
|
||||||
}],
|
});
|
||||||
]);})
|
|
||||||
|
|
||||||
.then(function() { test('The LRU cache', require('./lru-cache.js')); });
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user