@@ -82,3 +82,89 @@ test('should not throw error for ok response', async () => {
82
82
assert . equal ( response . statusCode , 200 )
83
83
assert . equal ( await response . body . text ( ) , 'hello' )
84
84
} )
85
+
86
+ test ( 'should throw error for error response, parsing JSON' , async ( ) => {
87
+ const server = createServer ( )
88
+
89
+ server . on ( 'request' , ( req , res ) => {
90
+ res . writeHead ( 400 , { 'content-type' : 'application/json; charset=utf-8' } )
91
+ res . end ( JSON . stringify ( { message : 'Bad Request' } ) )
92
+ } )
93
+
94
+ server . listen ( 0 )
95
+
96
+ await once ( server , 'listening' )
97
+
98
+ const client = new Client (
99
+ `http://localhost:${ server . address ( ) . port } `
100
+ ) . compose ( responseError ( ) )
101
+
102
+ after ( async ( ) => {
103
+ await client . close ( )
104
+ server . close ( )
105
+
106
+ await once ( server , 'close' )
107
+ } )
108
+
109
+ let error
110
+ try {
111
+ await client . request ( {
112
+ method : 'GET' ,
113
+ path : '/' ,
114
+ headers : {
115
+ 'content-type' : 'text/plain'
116
+ }
117
+ } )
118
+ } catch ( err ) {
119
+ error = err
120
+ }
121
+
122
+ assert . equal ( error . statusCode , 400 )
123
+ assert . equal ( error . message , 'Response Error' )
124
+ assert . deepStrictEqual ( error . body , {
125
+ message : 'Bad Request'
126
+ } )
127
+ } )
128
+
129
+ test ( 'should throw error for error response, parsing JSON without charset' , async ( ) => {
130
+ const server = createServer ( )
131
+
132
+ server . on ( 'request' , ( req , res ) => {
133
+ res . writeHead ( 400 , { 'content-type' : 'application/json' } )
134
+ res . end ( JSON . stringify ( { message : 'Bad Request' } ) )
135
+ } )
136
+
137
+ server . listen ( 0 )
138
+
139
+ await once ( server , 'listening' )
140
+
141
+ const client = new Client (
142
+ `http://localhost:${ server . address ( ) . port } `
143
+ ) . compose ( responseError ( ) )
144
+
145
+ after ( async ( ) => {
146
+ await client . close ( )
147
+ server . close ( )
148
+
149
+ await once ( server , 'close' )
150
+ } )
151
+
152
+ let error
153
+ try {
154
+ await client . request ( {
155
+ method : 'GET' ,
156
+ path : '/' ,
157
+ headers : {
158
+ 'content-type' : 'text/plain'
159
+ }
160
+ } )
161
+ } catch ( err ) {
162
+ error = err
163
+ }
164
+
165
+ assert . equal ( error . statusCode , 400 )
166
+ assert . equal ( error . message , 'Response Error' )
167
+ assert . deepStrictEqual ( error . body , {
168
+ message : 'Bad Request'
169
+ } )
170
+ } )
0 commit comments