Skip to content

Commit 180bc2b

Browse files
Add ugly error handler
1 parent 77757a8 commit 180bc2b

File tree

6 files changed

+82
-3
lines changed

6 files changed

+82
-3
lines changed

ProperErrorHandlingJavaScript.njsproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@
4141
<Compile Include="engines\render.js" />
4242
<Compile Include="routes\index.js" />
4343
<Compile Include="routes\route.js" />
44+
<Compile Include="tests\engines\httpHandler.test.js">
45+
<Publish>False</Publish>
46+
</Compile>
4447
<Compile Include="tests\routes\index.request.js">
4548
<Publish>False</Publish>
4649
</Compile>
@@ -50,8 +53,12 @@
5053
<Compile Include="tests\scripts\error.test.js">
5154
<Publish>False</Publish>
5255
</Compile>
56+
<Compile Include="tests\scripts\uglyHandler.test.js">
57+
<Publish>False</Publish>
58+
</Compile>
5359
<Content Include="scripts\badHandler.js" />
5460
<Content Include="scripts\error.js" />
61+
<Content Include="scripts\uglyHandler.js" />
5562
<Content Include="package.json" />
5663
<Content Include="README.md" />
5764
<Content Include="views\index.html" />
@@ -62,6 +69,7 @@
6269
<Folder Include="scripts\" />
6370
<Folder Include="tests\" />
6471
<Folder Include="routes\" />
72+
<Folder Include="tests\engines\" />
6573
<Folder Include="tests\scripts\" />
6674
<Folder Include="tests\routes\" />
6775
<Folder Include="views\" />

engines/httpHandler.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
function httpHandler (err, res, content) {
1+
function httpHandler(err, res, content) {
22
if (err) {
33
res.writeHead(500, { 'Content-Type': 'text/plain' });
4-
res.end('An error has occured: ' + err.message);
4+
res.end('Error: ' + err.message);
55
} else {
66
res.writeHead(200, { 'Content-Type': content.type });
77
res.end(content.response);

scripts/uglyHandler.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function uglyHandler(fn) {
2+
try {
3+
return fn();
4+
} catch (e) {
5+
throw Error('a new error');
6+
}
7+
}
8+
9+
if (typeof module === 'object') {
10+
module.exports = uglyHandler;
11+
}

tests/engines/httpHandler.test.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
var target = require('../../engines/httpHandler');
2+
var should = require('should');
3+
4+
describe('An HTTP engine', function () {
5+
it('handles errors', function () {
6+
var res = responseMock();
7+
target({ message: 'error' }, res);
8+
res.getResult().should.equal('500text/plainError: error');
9+
});
10+
11+
it('handles responses', function () {
12+
var res = responseMock();
13+
var content = { type: 'type', response: 'message' };
14+
target(null, res, content);
15+
res.getResult().should.equal('200typemessage');
16+
});
17+
18+
function responseMock() {
19+
var result = '';
20+
21+
return {
22+
writeHead: writeHead,
23+
end: end,
24+
getResult: getResult
25+
};
26+
27+
function writeHead(returnCode, header) {
28+
result += returnCode + header['Content-Type'];
29+
}
30+
31+
function end(body) {
32+
result += body;
33+
}
34+
35+
function getResult() {
36+
return result;
37+
}
38+
}
39+
});

tests/scripts/badHandler.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
var target = require('../../scripts/badHandler');
22
var should = require('should');
33

4-
describe('A bad handler', function() {
4+
describe('A bad error handler', function() {
55
it('returns a value without errors', function() {
66
var fn = function() {
77
return 1;

tests/scripts/uglyHandler.test.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
var target = require('../../scripts/uglyHandler');
2+
var should = require('should');
3+
4+
describe('An ugly error handler', function () {
5+
it('returns a value without errors', function () {
6+
var fn = function () {
7+
return 1;
8+
};
9+
var result = target(fn);
10+
result.should.equal(1);
11+
});
12+
13+
it('returns a new error with errors', function () {
14+
var fn = function () {
15+
throw new TypeError('type error');
16+
};
17+
should.throws(function () {
18+
target(fn);
19+
}, Error);
20+
});
21+
});

0 commit comments

Comments
 (0)