|
6 | 6 | *
|
7 | 7 | */
|
8 | 8 |
|
9 |
| -const stream = require('stream'); |
10 |
| -const assume = require('assume'); |
11 |
| -const mocha = require('mocha'); |
12 |
| -const winston = require('../../../lib/winston'); |
| 9 | +const baseHandlerTests = require('../../helpers/handler-tests'); |
13 | 10 | const helpers = require('../../helpers');
|
14 | 11 |
|
15 |
| -// |
16 |
| -// This is an awful and fragile hack that |
17 |
| -// needs to be changed ASAP. |
18 |
| -// https://github.com/mochajs/mocha/issues/1985 |
19 |
| -// |
20 |
| -var _runTest = mocha.Runner.prototype.runTest; |
21 |
| -mocha.Runner.prototype.runTest = function () { |
22 |
| - this.allowUncaught = true; |
23 |
| - _runTest.apply(this, arguments); |
24 |
| -}; |
25 |
| - |
26 | 12 | describe('UnhandledRejectionHandler', function () {
|
27 |
| - this.timeout(5000); |
28 |
| - |
29 |
| - it('has expected methods', function () { |
30 |
| - var handler = helpers.rejectionHandler(); |
31 |
| - assume(handler.handle).is.a('function'); |
32 |
| - assume(handler.unhandle).is.a('function'); |
33 |
| - assume(handler.getAllInfo).is.a('function'); |
34 |
| - assume(handler.getProcessInfo).is.a('function'); |
35 |
| - assume(handler.getOsInfo).is.a('function'); |
36 |
| - assume(handler.getTrace).is.a('function'); |
37 |
| - }); |
38 |
| - |
39 |
| - it('new RejectionHandler()', function () { |
40 |
| - assume(function () { |
41 |
| - new winston.RejectionHandler(); |
42 |
| - }).throws(/Logger is required/); |
43 |
| - }); |
44 |
| - |
45 |
| - it('new RejectionHandler(logger)', function () { |
46 |
| - var logger = winston.createLogger(); |
47 |
| - var handler = new winston.RejectionHandler(logger); |
48 |
| - assume(handler.logger).equals(logger); |
49 |
| - }); |
50 |
| - |
51 |
| - it('.getProcessInfo()', function () { |
52 |
| - var handler = helpers.rejectionHandler(); |
53 |
| - helpers.assertProcessInfo(handler.getProcessInfo()); |
54 |
| - }); |
55 |
| - |
56 |
| - it('.getOsInfo()', function () { |
57 |
| - var handler = helpers.rejectionHandler(); |
58 |
| - helpers.assertOsInfo(handler.getOsInfo()); |
59 |
| - }); |
60 |
| - |
61 |
| - it('.getTrace(new Error)', function () { |
62 |
| - var handler = helpers.rejectionHandler(); |
63 |
| - helpers.assertTrace(handler.getTrace(new Error())); |
64 |
| - }); |
65 |
| - |
66 |
| - it('.getTrace()', function () { |
67 |
| - var handler = helpers.rejectionHandler(); |
68 |
| - helpers.assertTrace(handler.getTrace()); |
69 |
| - }); |
70 |
| - |
71 |
| - it('.handle()', function (done) { |
72 |
| - process.removeAllListeners('unhandledRejection'); |
73 |
| - var existing = helpers.clearRejections(); |
74 |
| - var writeable = new stream.Writable({ |
75 |
| - objectMode: true, |
76 |
| - write: function (info) { |
77 |
| - assume(info).is.an('object'); |
78 |
| - assume(info.error).is.an('error'); |
79 |
| - assume(info.rejection).is.true(); |
80 |
| - assume(info.error.message).equals('wtf this rejection'); |
81 |
| - assume(info.message).includes('unhandledRejection: wtf this rejection'); |
82 |
| - assume(info.stack).is.a('string'); |
83 |
| - assume(info.process).is.an('object'); |
84 |
| - assume(info.os).is.an('object'); |
85 |
| - assume(info.trace).is.an('array'); |
86 |
| - |
87 |
| - existing.restore(); |
88 |
| - done(); |
89 |
| - } |
90 |
| - }); |
91 |
| - |
92 |
| - var transport = new winston.transports.Stream({ stream: writeable }); |
93 |
| - var handler = helpers.rejectionHandler({ |
94 |
| - exitOnError: false, |
95 |
| - transports: [transport] |
96 |
| - }); |
97 |
| - |
98 |
| - assume(handler.catcher).equals(undefined); |
99 |
| - |
100 |
| - transport.handleRejections = true; |
101 |
| - handler.handle(); |
102 |
| - |
103 |
| - assume(handler.catcher).is.a('function'); |
104 |
| - assume(process.listeners('unhandledRejection')).deep.equals([ |
105 |
| - handler.catcher |
106 |
| - ]); |
107 |
| - |
108 |
| - helpers.reject(new Error('wtf this rejection')); |
109 |
| - }); |
110 |
| - |
111 |
| - it('.getAllInfo(undefined)', function () { |
112 |
| - var handler = helpers.rejectionHandler(); |
113 |
| - // eslint-disable-next-line no-undefined |
114 |
| - handler.getAllInfo(undefined); |
115 |
| - }); |
116 |
| - |
117 |
| - after(function () { |
118 |
| - // |
119 |
| - // Restore normal `runTest` functionality |
120 |
| - // so that we only affect the current suite. |
121 |
| - // |
122 |
| - mocha.Runner.prototype.runTest = _runTest; |
| 13 | + this.timeout(100); |
| 14 | + |
| 15 | + baseHandlerTests({ |
| 16 | + name: 'RejectionHandler', |
| 17 | + helper: 'rejectionHandler', |
| 18 | + setup: 'clearRejections', |
| 19 | + listener: 'unhandledRejection', |
| 20 | + toggleSetting: 'handleRejections', |
| 21 | + trigger: msg => helpers.reject(new Error(msg)) |
123 | 22 | });
|
124 | 23 | });
|
0 commit comments