From 3e94194dcae751d4ebbc0e5f6ff34d0446be80d7 Mon Sep 17 00:00:00 2001 From: Khafra <42794878+KhafraDev@users.noreply.github.com> Date: Sat, 16 Apr 2022 02:38:53 -0400 Subject: [PATCH] fix: jest bug when using MockScope.delay (#1340) --- lib/api/api-request.js | 18 ++++++++++-------- test/jest/mock-scope.test.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 test/jest/mock-scope.test.js diff --git a/lib/api/api-request.js b/lib/api/api-request.js index 2d5bcf54c6d..bcfe483ebef 100644 --- a/lib/api/api-request.js +++ b/lib/api/api-request.js @@ -88,14 +88,16 @@ class RequestHandler extends AsyncResource { this.res = body const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) - this.runInAsyncScope(callback, null, null, { - statusCode, - headers, - trailers: this.trailers, - opaque, - body, - context - }) + if (callback !== null) { + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + trailers: this.trailers, + opaque, + body, + context + }) + } } onData (chunk) { diff --git a/test/jest/mock-scope.test.js b/test/jest/mock-scope.test.js new file mode 100644 index 00000000000..cab77f6b112 --- /dev/null +++ b/test/jest/mock-scope.test.js @@ -0,0 +1,32 @@ +const { MockAgent, setGlobalDispatcher, request } = require('../../index') + +/* global afterAll, expect, it, AbortController */ + +const runIf = (condition) => condition ? it : it.skip + +const nodeMajor = Number(process.versions.node.split('.', 1)[0]) +const mockAgent = new MockAgent() + +afterAll(async () => { + await mockAgent.close() +}) + +runIf(nodeMajor >= 16)('Jest works with MockScope.delay - issue #1327', async () => { + mockAgent.disableNetConnect() + setGlobalDispatcher(mockAgent) + + const mockPool = mockAgent.get('http://localhost:3333') + + mockPool.intercept({ + path: '/jest-bugs', + method: 'GET' + }).reply(200, 'Hello').delay(100) + + const ac = new AbortController() + setTimeout(() => ac.abort(), 5) + const promise = request('http://localhost:3333/jest-bugs', { + signal: ac.signal + }) + + await expect(promise).rejects.toThrowError('Request aborted') +}, 1000)