Fix brittle unit tests

This commit is contained in:
Brian M. Carlson 2017-06-16 15:56:18 -05:00 committed by Brian C
parent 5f5e40f03c
commit 0ce8a6c675
3 changed files with 65 additions and 105 deletions

View File

@ -1,5 +1,6 @@
var helper = require(__dirname+'/../test-helper');
var Connection = require(__dirname + '/../../../lib/connection');
var helper = require('../test-helper');
var Connection = require('../../../lib/connection');
var makeClient = function() {
var connection = new Connection({stream: "no"});
connection.startup = function() {};
@ -14,6 +15,6 @@ var makeClient = function() {
return client;
};
module.exports = {
module.exports = Object.assign({
client: makeClient
};
}, helper);

View File

@ -1,112 +1,69 @@
var helper = require("./test-helper");
var Query = require('../../../lib/query')
var types = require('pg-types')
var Query = require("../../../lib/query");
var types = require("pg-types");
test('handles throws in type parsers', function() {
var typeParserError = new Error('TEST: Throw in type parsers');
const suite = new helper.Suite();
types.setTypeParser('special oid that will throw', function () {
throw typeParserError;
var typeParserError = new Error("TEST: Throw in type parsers");
types.setTypeParser("special oid that will throw", function() {
throw typeParserError;
});
const emitFakeEvents = con => {
setImmediate(() => {
con.emit("readyForQuery");
con.emit("rowDescription", {
fields: [
{
name: "boom",
dataTypeID: "special oid that will throw"
}
]
});
con.emit("dataRow", { fields: ["hi"] });
con.emit("dataRow", { fields: ["hi"] });
con.emit("commandComplete", { text: "INSERT 31 1" });
con.emit("readyForQuery");
});
};
test('emits error', function() {
var handled;
var client = helper.client();
var con = client.connection;
var query = client.query(new Query('whatever'));
suite.test("emits error", function(done) {
var handled;
var client = helper.client();
var con = client.connection;
var query = client.query(new Query("whatever"));
emitFakeEvents(con)
handled = con.emit('readyForQuery');
assert.ok(handled, "should have handled ready for query");
con.emit('rowDescription',{
fields: [{
name: 'boom',
dataTypeID: 'special oid that will throw'
}]
});
assert.ok(handled, "should have handled row description");
assert.emits(query, 'error', function(err) {
assert.equal(err, typeParserError);
});
handled = con.emit('dataRow', { fields: ["hi"] });
assert.ok(handled, "should have handled first data row message");
handled = con.emit('commandComplete', { text: 'INSERT 31 1' });
assert.ok(handled, "should have handled command complete");
handled = con.emit('readyForQuery');
assert.ok(handled, "should have handled ready for query");
assert.emits(query, "error", function(err) {
assert.equal(err, typeParserError);
done();
});
});
test('calls callback with error', function() {
var handled;
suite.test("calls callback with error", function(done) {
var handled;
var callbackCalled = 0;
var callbackCalled = 0;
var client = helper.client();
var con = client.connection;
var query = client.query('whatever', assert.calls(function (err) {
callbackCalled += 1;
assert.equal(callbackCalled, 1);
assert.equal(err, typeParserError);
}));
handled = con.emit('readyForQuery');
assert.ok(handled, "should have handled ready for query");
handled = con.emit('rowDescription',{
fields: [{
name: 'boom',
dataTypeID: 'special oid that will throw'
}]
});
assert.ok(handled, "should have handled row description");
handled = con.emit('dataRow', { fields: ["hi"] });
assert.ok(handled, "should have handled first data row message");
handled = con.emit('dataRow', { fields: ["hi"] });
assert.ok(handled, "should have handled second data row message");
con.emit('commandComplete', { text: 'INSERT 31 1' });
assert.ok(handled, "should have handled command complete");
handled = con.emit('readyForQuery');
assert.ok(handled, "should have handled ready for query");
});
test('rejects promise with error', function() {
var handled;
var client = helper.client();
var con = client.connection;
var queryPromise = client.query('whatever');
handled = con.emit('readyForQuery');
assert.ok(handled, "should have handled ready for query");
handled = con.emit('rowDescription',{
fields: [{
name: 'boom',
dataTypeID: 'special oid that will throw'
}]
});
assert.ok(handled, "should have handled row description");
handled = con.emit('dataRow', { fields: ["hi"] });
assert.ok(handled, "should have handled first data row message");
handled = con.emit('commandComplete', { text: 'INSERT 31 1' });
assert.ok(handled, "should have handled command complete");
handled = con.emit('readyForQuery');
assert.ok(handled, "should have handled ready for query");
queryPromise.catch(assert.calls(function (err) {
assert.equal(err, typeParserError);
}));
var client = helper.client();
var con = client.connection;
emitFakeEvents(con);
var query = client.query("whatever", function(err) {
assert.equal(err, typeParserError);
done();
});
});
suite.test("rejects promise with error", function(done) {
var client = helper.client();
var con = client.connection;
emitFakeEvents(con);
client.query("whatever").catch(err => {
assert.equal(err, typeParserError);
done();
});
});

View File

@ -1,6 +1,8 @@
var helper = require(__dirname+'/../test-helper');
var EventEmitter = require('events').EventEmitter;
var Connection = require(__dirname + '/../../lib/connection');
var helper = require('../test-helper');
var Connection = require('../../lib/connection');
MemoryStream = function() {
EventEmitter.call(this);
this.packets = [];