Make HTTPClientMock#wait() to wait for all requests
This commit is contained in:
parent
d3f294a57c
commit
9dd6994498
@ -45,12 +45,21 @@ describe('HTTPClientMock', () => {
|
||||
const result2 = await promise
|
||||
expect(result1.res.data).toBe(result2)
|
||||
expect(result2).toBe(value)
|
||||
expect(result1.req).toBe(http.requests[0])
|
||||
expect(result1.req).toBe(http.requests[0].request)
|
||||
expect(result1.req).toEqual({
|
||||
method: 'get',
|
||||
url: '/test',
|
||||
})
|
||||
})
|
||||
|
||||
it('waits for all pending requests to complete', async () => {
|
||||
const promise1 = http.get('/test')
|
||||
const promise2 = http.post('/test', {})
|
||||
const error = await getError(http.wait())
|
||||
await promise1
|
||||
await getError(promise2)
|
||||
expect(error.message).toMatch(/No mock/)
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
@ -15,9 +15,14 @@ export class HTTPClientError extends Error {
|
||||
}
|
||||
}
|
||||
|
||||
export interface IRequestStatus {
|
||||
request: IRequest
|
||||
finished: boolean
|
||||
}
|
||||
|
||||
export class HTTPClientMock<T extends IRoutes> extends HTTPClient<T> {
|
||||
mocks: {[key: string]: IResponse} = {}
|
||||
requests: IRequest[] = []
|
||||
requests: IRequestStatus[] = []
|
||||
|
||||
protected waitPromise?: {
|
||||
resolve: (r: IReqRes) => void
|
||||
@ -34,13 +39,18 @@ export class HTTPClientMock<T extends IRoutes> extends HTTPClient<T> {
|
||||
createRequestor() {
|
||||
return {
|
||||
request: (req: IRequest): Promise<IResponse> => {
|
||||
this.requests.push(req)
|
||||
const currentRequest: IRequestStatus = {
|
||||
request: req,
|
||||
finished: false,
|
||||
}
|
||||
this.requests.push(currentRequest)
|
||||
return new Promise((resolve, reject) => {
|
||||
const key = this.serialize(req)
|
||||
if (!this.mocks.hasOwnProperty(key)) {
|
||||
setImmediate(() => {
|
||||
const err = new Error('No mock for request: ' + key)
|
||||
reject(err)
|
||||
currentRequest.finished = true
|
||||
this.notify(err)
|
||||
})
|
||||
return
|
||||
@ -49,11 +59,13 @@ export class HTTPClientMock<T extends IRoutes> extends HTTPClient<T> {
|
||||
setImmediate(() => {
|
||||
if (res.status >= 200 && res.status < 400) {
|
||||
resolve(res)
|
||||
currentRequest.finished = true
|
||||
this.notify({req, res})
|
||||
return
|
||||
}
|
||||
const error = new HTTPClientError(req, res)
|
||||
reject(error)
|
||||
currentRequest.finished = true
|
||||
this.notify(error)
|
||||
})
|
||||
})
|
||||
@ -88,6 +100,9 @@ export class HTTPClientMock<T extends IRoutes> extends HTTPClient<T> {
|
||||
if (!this.waitPromise) {
|
||||
return
|
||||
}
|
||||
if (!this.requests.every(status => status.finished)) {
|
||||
return
|
||||
}
|
||||
const waitPromise = this.waitPromise
|
||||
this.waitPromise = undefined
|
||||
if (r instanceof Error) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user