claude-code-best/src/utils/__tests__/withResolvers.test.ts
2026-05-01 21:39:30 +08:00

59 lines
1.8 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { withResolvers } from '../withResolvers'
describe('withResolvers', () => {
test('returns object with promise, resolve, reject', () => {
const result = withResolvers<string>()
expect(result).toHaveProperty('promise')
expect(result).toHaveProperty('resolve')
expect(result).toHaveProperty('reject')
expect(typeof result.resolve).toBe('function')
expect(typeof result.reject).toBe('function')
})
test('promise resolves when resolve is called', async () => {
const { promise, resolve } = withResolvers<string>()
resolve('hello')
const result = await promise
expect(result).toBe('hello')
})
test('promise rejects when reject is called', async () => {
const { promise, reject } = withResolvers<string>()
reject(new Error('fail'))
await expect(promise).rejects.toThrow('fail')
})
test('resolve passes value through', async () => {
const { promise, resolve } = withResolvers<number>()
resolve(42)
expect(await promise).toBe(42)
})
test('reject passes error through', async () => {
const { promise, reject } = withResolvers<void>()
const err = new Error('custom error')
reject(err)
await expect(promise).rejects.toBe(err)
})
test('promise is instanceof Promise', () => {
const { promise } = withResolvers<void>()
expect(promise).toBeInstanceOf(Promise)
})
test('works with generic type parameter', async () => {
const { promise, resolve } = withResolvers<{ name: string }>()
resolve({ name: 'test' })
const result = await promise
expect(result.name).toBe('test')
})
test('resolve/reject can be called asynchronously', async () => {
const { promise, resolve } = withResolvers<number>()
setTimeout(() => resolve(99), 10)
const result = await promise
expect(result).toBe(99)
})
})