@@ -211,8 +211,161 @@ describe('errorHandler()', function () {
211211 } )
212212} )
213213
214- function createServer ( error ) {
215- var _errorHandler = errorHandler ( )
214+ describe ( 'errorHandler(options)' , function ( ) {
215+ describe ( 'log' , function ( ) {
216+ it ( 'should reject a string' , function ( ) {
217+ assert . throws ( errorHandler . bind ( null , { log : 'yes, please' } ) , / o p t i o n l o g m u s t b e / )
218+ } )
219+
220+ describe ( 'when "undefined"' , function ( ) {
221+ var _consoleerror
222+
223+ before ( function ( ) {
224+ _consoleerror = console . error
225+ } )
226+ afterEach ( function ( ) {
227+ console . error = _consoleerror
228+ } )
229+
230+ describe ( 'when NODE_ENV == test' , function ( ) {
231+ alterEnvironment ( 'NODE_ENV' , 'test' )
232+
233+ it ( 'should produce no output' , function ( done ) {
234+ var error = new Error ( 'boom!' )
235+ var server = createServer ( error )
236+
237+ console . error = function ( ) {
238+ var log = util . format . apply ( null , arguments )
239+
240+ if ( log !== error . stack . toString ( ) ) {
241+ return _consoleerror . apply ( this , arguments )
242+ }
243+
244+ done ( new Error ( 'console.error written to' ) )
245+ }
246+
247+ request ( server )
248+ . get ( '/' )
249+ . set ( 'Accept' , 'text/plain' )
250+ . expect ( 500 , error . stack . toString ( ) , done )
251+ } )
252+ } )
253+
254+ describe ( 'when NODE_ENV != test' , function ( ) {
255+ alterEnvironment ( 'NODE_ENV' , '' )
256+
257+ it ( 'should write to console' , function ( done ) {
258+ var cb = after ( 2 , done )
259+ var error = new Error ( 'boom!' )
260+ var server = createServer ( error )
261+
262+ console . error = function ( ) {
263+ var log = util . format . apply ( null , arguments )
264+
265+ if ( log !== error . stack . toString ( ) ) {
266+ return _consoleerror . apply ( this , arguments )
267+ }
268+
269+ cb ( )
270+ }
271+
272+ request ( server )
273+ . get ( '/' )
274+ . set ( 'Accept' , 'text/plain' )
275+ . expect ( 500 , error . stack . toString ( ) , cb )
276+ } )
277+ } )
278+ } )
279+
280+ describe ( 'when "true"' , function ( ) {
281+ var _consoleerror
282+
283+ before ( function ( ) {
284+ _consoleerror = console . error
285+ } )
286+ afterEach ( function ( ) {
287+ console . error = _consoleerror
288+ } )
289+
290+ it ( 'should write to console' , function ( done ) {
291+ var cb = after ( 2 , done )
292+ var error = new Error ( 'boom!' )
293+ var server = createServer ( error , { log : true } )
294+
295+ console . error = function ( ) {
296+ var log = util . format . apply ( null , arguments )
297+
298+ if ( log !== error . stack . toString ( ) ) {
299+ return _consoleerror . apply ( this , arguments )
300+ }
301+
302+ cb ( )
303+ }
304+
305+ request ( server )
306+ . get ( '/' )
307+ . set ( 'Accept' , 'text/plain' )
308+ . expect ( 500 , error . stack . toString ( ) , cb )
309+ } )
310+ } )
311+
312+ describe ( 'when "false"' , function ( ) {
313+ var _consoleerror
314+
315+ alterEnvironment ( 'NODE_ENV' , '' )
316+ before ( function ( ) {
317+ _consoleerror = console . error
318+ } )
319+ afterEach ( function ( ) {
320+ console . error = _consoleerror
321+ } )
322+
323+ it ( 'should not write to console' , function ( done ) {
324+ var error = new Error ( 'boom!' )
325+ var server = createServer ( error , { log : false } )
326+
327+ console . error = function ( ) {
328+ var log = util . format . apply ( null , arguments )
329+
330+ if ( log !== error . stack . toString ( ) ) {
331+ return _consoleerror . apply ( this , arguments )
332+ }
333+
334+ done ( new Error ( 'console.error written to' ) )
335+ }
336+
337+ request ( server )
338+ . get ( '/' )
339+ . set ( 'Accept' , 'text/plain' )
340+ . expect ( 500 , error . stack . toString ( ) , done )
341+ } )
342+ } )
343+
344+ describe ( 'when a function' , function ( ) {
345+ it ( 'should call function' , function ( done ) {
346+ var cb = after ( 2 , done )
347+ var error = new Error ( 'boom!' )
348+ var server = createServer ( error , { log : log } )
349+
350+ function log ( err , str , req , res ) {
351+ assert . equal ( err , error )
352+ assert . equal ( str , error . stack . toString ( ) )
353+ assert . equal ( req . url , '/' )
354+ assert . equal ( res . statusCode , 500 )
355+ cb ( )
356+ }
357+
358+ request ( server )
359+ . get ( '/' )
360+ . set ( 'Accept' , 'text/plain' )
361+ . expect ( 500 , error . stack . toString ( ) , cb )
362+ } )
363+ } )
364+ } )
365+ } )
366+
367+ function createServer ( error , options ) {
368+ var _errorHandler = errorHandler ( options )
216369
217370 return http . createServer ( function ( req , res ) {
218371 _errorHandler ( error , req , res , function ( err ) {
@@ -221,3 +374,15 @@ function createServer(error) {
221374 } )
222375 } )
223376}
377+
378+ function alterEnvironment ( key , value ) {
379+ var prev
380+
381+ before ( function ( ) {
382+ prev = process . env [ key ]
383+ process . env [ key ] = value
384+ } )
385+ after ( function ( ) {
386+ process . env [ key ] = prev
387+ } )
388+ }
0 commit comments