From 0ce8a6c675be21bf2ec450cd15ca602c77f2644d Mon Sep 17 00:00:00 2001 From: "Brian M. Carlson" Date: Fri, 16 Jun 2017 15:56:18 -0500 Subject: [PATCH] Fix brittle unit tests --- test/unit/client/test-helper.js | 9 +- .../unit/client/throw-in-type-parser-tests.js | 155 +++++++----------- test/unit/test-helper.js | 6 +- 3 files changed, 65 insertions(+), 105 deletions(-) diff --git a/test/unit/client/test-helper.js b/test/unit/client/test-helper.js index a8294023..7c0bb31b 100644 --- a/test/unit/client/test-helper.js +++ b/test/unit/client/test-helper.js @@ -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); diff --git a/test/unit/client/throw-in-type-parser-tests.js b/test/unit/client/throw-in-type-parser-tests.js index 37a272aa..2f184543 100644 --- a/test/unit/client/throw-in-type-parser-tests.js +++ b/test/unit/client/throw-in-type-parser-tests.js @@ -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(); + }); +}); diff --git a/test/unit/test-helper.js b/test/unit/test-helper.js index 878898d8..ad6485be 100644 --- a/test/unit/test-helper.js +++ b/test/unit/test-helper.js @@ -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 = [];