Skip to content

Commit 0ce8a6c

Browse files
committed
Fix brittle unit tests
1 parent 5f5e40f commit 0ce8a6c

File tree

3 files changed

+62
-102
lines changed

3 files changed

+62
-102
lines changed

test/unit/client/test-helper.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
var helper = require(__dirname+'/../test-helper');
2-
var Connection = require(__dirname + '/../../../lib/connection');
1+
var helper = require('../test-helper');
2+
var Connection = require('../../../lib/connection');
3+
34
var makeClient = function() {
45
var connection = new Connection({stream: "no"});
56
connection.startup = function() {};
@@ -14,6 +15,6 @@ var makeClient = function() {
1415
return client;
1516
};
1617

17-
module.exports = {
18+
module.exports = Object.assign({
1819
client: makeClient
19-
};
20+
}, helper);
+53-96
Original file line numberDiff line numberDiff line change
@@ -1,112 +1,69 @@
11
var helper = require("./test-helper");
2-
var Query = require('../../../lib/query')
3-
var types = require('pg-types')
2+
var Query = require("../../../lib/query");
3+
var types = require("pg-types");
44

5-
test('handles throws in type parsers', function() {
6-
var typeParserError = new Error('TEST: Throw in type parsers');
5+
const suite = new helper.Suite();
76

8-
types.setTypeParser('special oid that will throw', function () {
9-
throw typeParserError;
10-
});
11-
12-
test('emits error', function() {
13-
var handled;
14-
var client = helper.client();
15-
var con = client.connection;
16-
var query = client.query(new Query('whatever'));
7+
var typeParserError = new Error("TEST: Throw in type parsers");
178

18-
handled = con.emit('readyForQuery');
19-
assert.ok(handled, "should have handled ready for query");
20-
21-
con.emit('rowDescription',{
22-
fields: [{
23-
name: 'boom',
24-
dataTypeID: 'special oid that will throw'
25-
}]
26-
});
27-
assert.ok(handled, "should have handled row description");
9+
types.setTypeParser("special oid that will throw", function() {
10+
throw typeParserError;
11+
});
2812

29-
assert.emits(query, 'error', function(err) {
30-
assert.equal(err, typeParserError);
13+
const emitFakeEvents = con => {
14+
setImmediate(() => {
15+
con.emit("readyForQuery");
16+
17+
con.emit("rowDescription", {
18+
fields: [
19+
{
20+
name: "boom",
21+
dataTypeID: "special oid that will throw"
22+
}
23+
]
3124
});
3225

33-
handled = con.emit('dataRow', { fields: ["hi"] });
34-
assert.ok(handled, "should have handled first data row message");
35-
36-
handled = con.emit('commandComplete', { text: 'INSERT 31 1' });
37-
assert.ok(handled, "should have handled command complete");
38-
39-
handled = con.emit('readyForQuery');
40-
assert.ok(handled, "should have handled ready for query");
26+
con.emit("dataRow", { fields: ["hi"] });
27+
con.emit("dataRow", { fields: ["hi"] });
28+
con.emit("commandComplete", { text: "INSERT 31 1" });
29+
con.emit("readyForQuery");
4130
});
42-
43-
test('calls callback with error', function() {
44-
var handled;
45-
46-
var callbackCalled = 0;
47-
48-
var client = helper.client();
49-
var con = client.connection;
50-
var query = client.query('whatever', assert.calls(function (err) {
51-
callbackCalled += 1;
52-
53-
assert.equal(callbackCalled, 1);
54-
assert.equal(err, typeParserError);
55-
}));
56-
57-
handled = con.emit('readyForQuery');
58-
assert.ok(handled, "should have handled ready for query");
59-
60-
handled = con.emit('rowDescription',{
61-
fields: [{
62-
name: 'boom',
63-
dataTypeID: 'special oid that will throw'
64-
}]
65-
});
66-
assert.ok(handled, "should have handled row description");
67-
68-
handled = con.emit('dataRow', { fields: ["hi"] });
69-
assert.ok(handled, "should have handled first data row message");
70-
71-
handled = con.emit('dataRow', { fields: ["hi"] });
72-
assert.ok(handled, "should have handled second data row message");
73-
74-
con.emit('commandComplete', { text: 'INSERT 31 1' });
75-
assert.ok(handled, "should have handled command complete");
76-
77-
handled = con.emit('readyForQuery');
78-
assert.ok(handled, "should have handled ready for query");
31+
};
32+
33+
suite.test("emits error", function(done) {
34+
var handled;
35+
var client = helper.client();
36+
var con = client.connection;
37+
var query = client.query(new Query("whatever"));
38+
emitFakeEvents(con)
39+
40+
assert.emits(query, "error", function(err) {
41+
assert.equal(err, typeParserError);
42+
done();
7943
});
44+
});
8045

81-
test('rejects promise with error', function() {
82-
var handled;
83-
var client = helper.client();
84-
var con = client.connection;
85-
var queryPromise = client.query('whatever');
86-
87-
handled = con.emit('readyForQuery');
88-
assert.ok(handled, "should have handled ready for query");
89-
90-
handled = con.emit('rowDescription',{
91-
fields: [{
92-
name: 'boom',
93-
dataTypeID: 'special oid that will throw'
94-
}]
95-
});
96-
assert.ok(handled, "should have handled row description");
46+
suite.test("calls callback with error", function(done) {
47+
var handled;
9748

98-
handled = con.emit('dataRow', { fields: ["hi"] });
99-
assert.ok(handled, "should have handled first data row message");
49+
var callbackCalled = 0;
10050

101-
handled = con.emit('commandComplete', { text: 'INSERT 31 1' });
102-
assert.ok(handled, "should have handled command complete");
51+
var client = helper.client();
52+
var con = client.connection;
53+
emitFakeEvents(con);
54+
var query = client.query("whatever", function(err) {
55+
assert.equal(err, typeParserError);
56+
done();
57+
});
10358

104-
handled = con.emit('readyForQuery');
105-
assert.ok(handled, "should have handled ready for query");
59+
});
10660

107-
queryPromise.catch(assert.calls(function (err) {
108-
assert.equal(err, typeParserError);
109-
}));
61+
suite.test("rejects promise with error", function(done) {
62+
var client = helper.client();
63+
var con = client.connection;
64+
emitFakeEvents(con);
65+
client.query("whatever").catch(err => {
66+
assert.equal(err, typeParserError);
67+
done();
11068
});
111-
11269
});

test/unit/test-helper.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
var helper = require(__dirname+'/../test-helper');
21
var EventEmitter = require('events').EventEmitter;
3-
var Connection = require(__dirname + '/../../lib/connection');
2+
3+
var helper = require('../test-helper');
4+
var Connection = require('../../lib/connection');
5+
46
MemoryStream = function() {
57
EventEmitter.call(this);
68
this.packets = [];

0 commit comments

Comments
 (0)