Skip to content

Commit

Permalink
fix: delayed response read (#14)
Browse files Browse the repository at this point in the history
  • Loading branch information
gr2m committed Dec 22, 2021
1 parent ddce3a3 commit 693fc94
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 8 deletions.
18 changes: 10 additions & 8 deletions index.js
Expand Up @@ -39,16 +39,18 @@ export default {
interceptedRequest.on("response", async (response) => {
// read the response body as an array of Buffer chuncks
const responseBodyChunks = [];
for await (const chunk of response) {
response.on("data", (chunk) => {
responseBodyChunks.push(Buffer.from(chunk));
}
});

// emit the `request` event with the request and response body
emitter.emit("record", {
request: interceptedRequest,
requestBody: requestBodyChunks,
response,
responseBody: responseBodyChunks,
response.on("close", () => {
// emit the `request` event with the request and response body
emitter.emit("record", {
request: interceptedRequest,
requestBody: requestBodyChunks,
response,
responseBody: responseBodyChunks,
});
});
});

Expand Down
66 changes: 66 additions & 0 deletions test/index.js
Expand Up @@ -201,6 +201,72 @@ test("request.end(callback)", () => {
});
});

test("delayed response read", () => {
return new Promise((resolve, reject) => {
const server = http.createServer(async (_request, response) => {
response.write("Hello!");
response.end();
});
const { port } = server.listen().address();

HttpRecorder.enable();
HttpRecorder.on("record", async ({ responseBody }) => {
try {
assert.equal(Buffer.concat(responseBody).toString(), "Hello!");
assert.ok(retrievedData);
resolve();
} catch (error) {
reject(error);
}
});

let retrievedData = false;
http.get(`http://localhost:${port}`, (response) => {
response.pause();
response.on("close", () => {
server.close();
});
setTimeout(() => {
response.on("data", (data) => {
assert.equal(data.toString(), "Hello!");
retrievedData = true;
});
response.resume();
}, 100);
});
});
});

test("response.end(text)", () => {
return new Promise((resolve, reject) => {
const server = http.createServer(async (_request, response) => {
response.end("Hello!");
});
const { port } = server.listen().address();

HttpRecorder.enable();
let retrievedData = false;
HttpRecorder.on("record", async ({ responseBody }) => {
try {
assert.equal(Buffer.concat(responseBody).toString(), "Hello!");
retrievedData = true;
server.close();
resolve();
} catch (error) {
reject(error);
}
});

http.get(`http://localhost:${port}`, async (response) => {
response.resume();
for await (const chunk of response) {
assert.equal(chunk.toString(), "Hello!");
}
assert.ok(retrievedData);
});
});
});

test("https", () => {
return new Promise((resolve, reject) => {
const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
Expand Down

0 comments on commit 693fc94

Please sign in to comment.