Skip to content

Commit 169f416

Browse files
fix(fromTraffic): clone response for subsequent requests (#67)
Co-authored-by: Artem Zakharchenko <[email protected]>
1 parent eeba04f commit 169f416

File tree

4 files changed

+398
-3
lines changed

4 files changed

+398
-3
lines changed

src/traffic/from-traffic.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export function fromTraffic(
6969
await delay(entry.time)
7070
}
7171

72-
return response
72+
return isUniqueHandler ? response.clone() : response
7373
},
7474
{
7575
once: !isUniqueHandler,
Lines changed: 344 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,344 @@
1+
{
2+
"log": {
3+
"version": "1.2",
4+
"creator": {
5+
"name": "WebInspector",
6+
"version": "537.36"
7+
},
8+
"pages": [],
9+
"entries": [
10+
{
11+
"_initiator": {
12+
"type": "script",
13+
"stack": {
14+
"callFrames": [
15+
{
16+
"functionName": "eval",
17+
"scriptId": "13",
18+
"url": "",
19+
"lineNumber": 3,
20+
"columnNumber": 39
21+
},
22+
{
23+
"functionName": "eval",
24+
"scriptId": "13",
25+
"url": "",
26+
"lineNumber": 1,
27+
"columnNumber": 56
28+
},
29+
{
30+
"functionName": "evaluate",
31+
"scriptId": "6",
32+
"url": "",
33+
"lineNumber": 340,
34+
"columnNumber": 15
35+
},
36+
{
37+
"functionName": "",
38+
"scriptId": "12",
39+
"url": "",
40+
"lineNumber": 0,
41+
"columnNumber": 43
42+
}
43+
]
44+
}
45+
},
46+
"_priority": "High",
47+
"_resourceType": "fetch",
48+
"cache": {},
49+
"connection": "29",
50+
"request": {
51+
"method": "GET",
52+
"url": "http://127.0.0.1:51345/resource",
53+
"httpVersion": "HTTP/1.1",
54+
"headers": [
55+
{
56+
"name": "Host",
57+
"value": "127.0.0.1:51345"
58+
},
59+
{
60+
"name": "Connection",
61+
"value": "keep-alive"
62+
},
63+
{
64+
"name": "sec-ch-ua",
65+
"value": "\"Chromium\";v=\"93\", \" Not;A Brand\";v=\"99\""
66+
},
67+
{
68+
"name": "sec-ch-ua-mobile",
69+
"value": "?0"
70+
},
71+
{
72+
"name": "User-Agent",
73+
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4576.0 Safari/537.36"
74+
},
75+
{
76+
"name": "sec-ch-ua-platform",
77+
"value": "\"macOS\""
78+
},
79+
{
80+
"name": "Accept",
81+
"value": "*/*"
82+
},
83+
{
84+
"name": "Origin",
85+
"value": "null"
86+
},
87+
{
88+
"name": "Sec-Fetch-Site",
89+
"value": "cross-site"
90+
},
91+
{
92+
"name": "Sec-Fetch-Mode",
93+
"value": "cors"
94+
},
95+
{
96+
"name": "Sec-Fetch-Dest",
97+
"value": "empty"
98+
},
99+
{
100+
"name": "Accept-Encoding",
101+
"value": "gzip, deflate, br"
102+
},
103+
{
104+
"name": "Accept-Language",
105+
"value": "en-US,en;q=0.9"
106+
}
107+
],
108+
"queryString": [],
109+
"cookies": [],
110+
"headersSize": 477,
111+
"bodySize": 0
112+
},
113+
"response": {
114+
"status": 200,
115+
"statusText": "OK",
116+
"httpVersion": "HTTP/1.1",
117+
"headers": [
118+
{
119+
"name": "X-Powered-By",
120+
"value": "Express"
121+
},
122+
{
123+
"name": "Access-Control-Allow-Origin",
124+
"value": "*"
125+
},
126+
{
127+
"name": "Content-Type",
128+
"value": "text/html; charset=utf-8"
129+
},
130+
{
131+
"name": "Content-Length",
132+
"value": "14"
133+
},
134+
{
135+
"name": "ETag",
136+
"value": "W/\"e-lDXCsB3mEANLxMr+ZDknI3O1vrg\""
137+
},
138+
{
139+
"name": "Date",
140+
"value": "Sun, 15 Aug 2021 13:41:24 GMT"
141+
},
142+
{
143+
"name": "Connection",
144+
"value": "keep-alive"
145+
}
146+
],
147+
"cookies": [],
148+
"content": {
149+
"size": 14,
150+
"mimeType": "text/html",
151+
"compression": 0,
152+
"text": "first"
153+
},
154+
"redirectURL": "",
155+
"headersSize": 236,
156+
"bodySize": 14,
157+
"_transferSize": 250,
158+
"_error": null
159+
},
160+
"serverIPAddress": "127.0.0.1",
161+
"startedDateTime": "2021-08-15T13:41:24.681Z",
162+
"time": 6.774000000096828,
163+
"timings": {
164+
"blocked": 0.7860000000414147,
165+
"dns": 0.013000000000000012,
166+
"ssl": -1,
167+
"connect": 0.38500000000000006,
168+
"send": 0.07999999999999996,
169+
"wait": 5.130000000105326,
170+
"receive": 0.37999999995008693,
171+
"_blocked_queueing": 0.6140000000414148
172+
}
173+
},
174+
{
175+
"_initiator": {
176+
"type": "script",
177+
"stack": {
178+
"callFrames": [
179+
{
180+
"functionName": "eval",
181+
"scriptId": "13",
182+
"url": "",
183+
"lineNumber": 3,
184+
"columnNumber": 39
185+
},
186+
{
187+
"functionName": "eval",
188+
"scriptId": "13",
189+
"url": "",
190+
"lineNumber": 1,
191+
"columnNumber": 56
192+
},
193+
{
194+
"functionName": "evaluate",
195+
"scriptId": "6",
196+
"url": "",
197+
"lineNumber": 340,
198+
"columnNumber": 15
199+
},
200+
{
201+
"functionName": "",
202+
"scriptId": "12",
203+
"url": "",
204+
"lineNumber": 0,
205+
"columnNumber": 43
206+
}
207+
]
208+
}
209+
},
210+
"_priority": "High",
211+
"_resourceType": "fetch",
212+
"cache": {},
213+
"connection": "34",
214+
"request": {
215+
"method": "GET",
216+
"url": "http://127.0.0.1:51345/resource",
217+
"httpVersion": "HTTP/1.1",
218+
"headers": [
219+
{
220+
"name": "Host",
221+
"value": "127.0.0.1:51345"
222+
},
223+
{
224+
"name": "Connection",
225+
"value": "keep-alive"
226+
},
227+
{
228+
"name": "sec-ch-ua",
229+
"value": "\"Chromium\";v=\"93\", \" Not;A Brand\";v=\"99\""
230+
},
231+
{
232+
"name": "sec-ch-ua-mobile",
233+
"value": "?0"
234+
},
235+
{
236+
"name": "User-Agent",
237+
"value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4576.0 Safari/537.36"
238+
},
239+
{
240+
"name": "sec-ch-ua-platform",
241+
"value": "\"macOS\""
242+
},
243+
{
244+
"name": "Accept",
245+
"value": "*/*"
246+
},
247+
{
248+
"name": "Origin",
249+
"value": "null"
250+
},
251+
{
252+
"name": "Sec-Fetch-Site",
253+
"value": "cross-site"
254+
},
255+
{
256+
"name": "Sec-Fetch-Mode",
257+
"value": "cors"
258+
},
259+
{
260+
"name": "Sec-Fetch-Dest",
261+
"value": "empty"
262+
},
263+
{
264+
"name": "Accept-Encoding",
265+
"value": "gzip, deflate, br"
266+
},
267+
{
268+
"name": "Accept-Language",
269+
"value": "en-US,en;q=0.9"
270+
},
271+
{
272+
"name": "If-None-Match",
273+
"value": "W/\"e-lDXCsB3mEANLxMr+ZDknI3O1vrg\""
274+
}
275+
],
276+
"queryString": [],
277+
"cookies": [],
278+
"headersSize": 527,
279+
"bodySize": 0
280+
},
281+
"response": {
282+
"status": 200,
283+
"statusText": "OK",
284+
"httpVersion": "HTTP/1.1",
285+
"headers": [
286+
{
287+
"name": "X-Powered-By",
288+
"value": "Express"
289+
},
290+
{
291+
"name": "Access-Control-Allow-Origin",
292+
"value": "*"
293+
},
294+
{
295+
"name": "Content-Type",
296+
"value": "text/html; charset=utf-8"
297+
},
298+
{
299+
"name": "Content-Length",
300+
"value": "14"
301+
},
302+
{
303+
"name": "ETag",
304+
"value": "W/\"e-3dlKK58QOHvviPbNHbANXgv8hSk\""
305+
},
306+
{
307+
"name": "Date",
308+
"value": "Sun, 15 Aug 2021 13:41:24 GMT"
309+
},
310+
{
311+
"name": "Connection",
312+
"value": "keep-alive"
313+
}
314+
],
315+
"cookies": [],
316+
"content": {
317+
"size": 14,
318+
"mimeType": "text/html",
319+
"compression": 0,
320+
"text": "latest"
321+
},
322+
"redirectURL": "",
323+
"headersSize": 236,
324+
"bodySize": 14,
325+
"_transferSize": 250,
326+
"_error": null
327+
},
328+
"serverIPAddress": "127.0.0.1",
329+
"startedDateTime": "2021-08-15T13:41:24.681Z",
330+
"time": 7.915999999921842,
331+
"timings": {
332+
"blocked": 6.177999999940497,
333+
"dns": 0.004999999999999893,
334+
"ssl": -1,
335+
"connect": 0.12699999999999978,
336+
"send": 0.3100000000000005,
337+
"wait": 1.0960000000315482,
338+
"receive": 0.1999999999497959,
339+
"_blocked_queueing": 0.6989999999404972
340+
}
341+
}
342+
]
343+
}
344+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { createTrafficScenario } from '../../utils/create-traffic-scenario'
2+
3+
createTrafficScenario(
4+
(app) => {
5+
let isFirstRequest = true
6+
7+
app.get('/resource', (req, res) => {
8+
if (isFirstRequest) {
9+
isFirstRequest = false
10+
return res.send('first')
11+
}
12+
13+
res.send('latest')
14+
})
15+
},
16+
(server) => [
17+
// Intentionally request two same endpoints.
18+
[server.http.url('/resource')],
19+
[server.http.url('/resource')],
20+
],
21+
)

0 commit comments

Comments
 (0)