fix: rejects & resolves breaks with thenable objects (#3456)

This commit is contained in:
Han Feng 2023-05-29 21:45:27 +08:00 committed by GitHub
parent 56b99275b2
commit 4e996ae507
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 2 deletions

View File

@ -1,6 +1,6 @@
export function recordAsyncExpect(test: any, promise: Promise<any>) {
export function recordAsyncExpect(test: any, promise: Promise<any> | PromiseLike<any>) {
// record promise for test, that resolves before test ends
if (test) {
if (test && promise instanceof Promise) {
// if promise is explicitly awaited, remove it from the list
promise = promise.finally(() => {
const index = test.promises.indexOf(promise)

View File

@ -720,6 +720,25 @@ describe('async expect', () => {
expect(value).toBe(1)
})
})
it('handle thenable objects', async () => {
await expect({ then: (resolve: any) => resolve(0) }).resolves.toBe(0)
await expect({ then: (_: any, reject: any) => reject(0) }).rejects.toBe(0)
try {
await expect({ then: (resolve: any) => resolve(0) }).rejects.toBe(0)
}
catch (error) {
expect(error).toEqual(new Error('promise resolved "0" instead of rejecting'))
}
try {
await expect({ then: (_: any, reject: any) => reject(0) }).resolves.toBe(0)
}
catch (error) {
expect(error).toEqual(new Error('promise rejected "0" instead of resolving'))
}
})
})
it('compatible with jest', () => {