Skip to content

Commit 32c8d17

Browse files
committed
add tests for getAbortController
1 parent 3818bb2 commit 32c8d17

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

packages/sdk-middleware-http/src/http.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export default function createHttpMiddleware({
9595
let abortController
9696
if (timeout || getAbortController || _abortController)
9797
// eslint-disable-next-line
98-
abortController = getAbortController() || _abortController || new AbortController()
98+
abortController = (getAbortController ? getAbortController(): null) || _abortController || new AbortController()
9999

100100
const url = host.replace(/\/$/, '') + request.uri
101101
const body =

packages/sdk-middleware-http/test/http.spec.js

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ describe('Http', () => {
3636
createHttpMiddleware({ host: testHost, timeout: 100, fetch })
3737
}).toThrow(
3838
new Error(
39-
'`AbortController` is not available. Please pass in `AbortController` as an option or have it globally available when using timeout.'
39+
'`AbortController` is not available. Please pass in `getAbortController` as an option or have AbortController globally available when using timeout.'
4040
)
4141
)
4242
})
@@ -102,6 +102,38 @@ describe('Http', () => {
102102
httpMiddleware(next)(request, response)
103103
}))
104104

105+
test('execute a get request with getAbortController timeout (success)', () =>
106+
new Promise((resolve, reject) => {
107+
const request = createTestRequest({
108+
uri: '/foo/bar',
109+
})
110+
const response = { resolve, reject }
111+
const next = (req, res) => {
112+
expect(res).toEqual({
113+
...response,
114+
body: { foo: 'bar' },
115+
statusCode: 200,
116+
})
117+
resolve()
118+
}
119+
// Use default options
120+
const httpMiddleware = createHttpMiddleware({
121+
host: testHost,
122+
timeout: 1000, // time out after 1s
123+
fetch,
124+
getAbortController: () => new AbortController(),
125+
})
126+
nock(testHost)
127+
.defaultReplyHeaders({
128+
'Content-Type': 'application/json',
129+
})
130+
.get('/foo/bar')
131+
.delay(10) // delay response with 10ms
132+
.reply(200, { foo: 'bar' })
133+
134+
httpMiddleware(next)(request, response)
135+
}))
136+
105137
test('execute a get request with short timeout (fail)', () =>
106138
new Promise((resolve, reject) => {
107139
const request = createTestRequest({
@@ -134,6 +166,38 @@ describe('Http', () => {
134166
httpMiddleware(next)(request, response)
135167
}))
136168

169+
test('execute a get request with getAbortController short timeout (fail)', () =>
170+
new Promise((resolve, reject) => {
171+
const request = createTestRequest({
172+
uri: '/foo/bar',
173+
})
174+
const response = { resolve, reject }
175+
const next = (req, res) => {
176+
expect(res).toEqual({
177+
...response,
178+
error: expect.any(Error),
179+
statusCode: 0,
180+
})
181+
resolve()
182+
}
183+
// Use default options
184+
const httpMiddleware = createHttpMiddleware({
185+
host: testHost,
186+
timeout: 10, // time out after 10ms
187+
fetch,
188+
getAbortController: () => new AbortController(),
189+
})
190+
nock(testHost)
191+
.defaultReplyHeaders({
192+
'Content-Type': 'application/json',
193+
})
194+
.get('/foo/bar')
195+
.delay(100) // delay response with 100ms
196+
.reply(200, { foo: 'bar' })
197+
198+
httpMiddleware(next)(request, response)
199+
}))
200+
137201
test('execute a request with timeout and client re-use', () =>
138202
new Promise((resolve, reject) => {
139203
const request = createTestRequest({

0 commit comments

Comments
 (0)