Skip to content

Commit e35d444

Browse files
committed
feat: improve tests
1 parent 2783b04 commit e35d444

1 file changed

Lines changed: 41 additions & 40 deletions

File tree

src/query/query.test.ts

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@ import { createQuery, defaultFetcher, FetcherAdditional } from 'query:index'
33

44
describe.concurrent('query', function () {
55
it('can query resources', async ({ expect }) => {
6-
async function fetcher(key: string) {
7-
await new Promise((r) => setTimeout(r, 200))
8-
9-
return key
6+
function fetcher(key: string) {
7+
return Promise.resolve(key)
108
}
119

1210
const { query } = createQuery({ fetcher })
@@ -52,19 +50,31 @@ describe.concurrent('query', function () {
5250
expect(resource).toBe('example')
5351
})
5452

55-
it('returns the same promise when resources are resolving', async ({ expect }) => {
53+
it('returns the same promise when resources are resolving', async ({ expect, signal }) => {
54+
const controller = new AbortController()
55+
const s = AbortSignal.any([controller.signal, signal])
56+
5657
let times = 0
57-
async function fetcher() {
58-
await new Promise((r) => setTimeout(r, 200))
59-
times++
60-
return 'example'
58+
59+
function fetcher() {
60+
return new Promise(function (resolve) {
61+
s.addEventListener('abort', function () {
62+
times++
63+
resolve('example')
64+
})
65+
})
6166
}
6267

6368
const { query } = createQuery({ fetcher })
6469

65-
void query<string>('example-key')
66-
await query<string>('example-key')
70+
const a = query<string>('example-key')
71+
const b = query<string>('example-key')
72+
73+
controller.abort()
74+
75+
await Promise.all([a, b])
6776

77+
expect(a).toBe(b)
6878
expect(times).toBe(1)
6979
})
7080

@@ -243,13 +253,10 @@ describe.concurrent('query', function () {
243253
const err = new Error('aborted')
244254

245255
function fetcher(_key: string, { signal }: FetcherAdditional) {
246-
return new Promise(function (resolve, reject) {
256+
return new Promise(function (_resolve, reject) {
247257
signal.addEventListener('abort', function () {
248258
reject(err)
249259
})
250-
void new Promise((r) => setTimeout(r, 200)).then(function () {
251-
resolve('example')
252-
})
253260
})
254261
}
255262

@@ -276,13 +283,10 @@ describe.concurrent('query', function () {
276283
const err = new Error('aborted')
277284

278285
function fetcher(_key: string, { signal }: FetcherAdditional) {
279-
return new Promise(function (resolve, reject) {
286+
return new Promise(function (_resolve, reject) {
280287
signal.addEventListener('abort', function () {
281288
reject(err)
282289
})
283-
void new Promise((r) => setTimeout(r, 200)).then(function () {
284-
resolve('example')
285-
})
286290
})
287291
}
288292

@@ -405,13 +409,10 @@ describe.concurrent('query', function () {
405409
const err = new Error('aborted')
406410

407411
function fetcher(_key: string, { signal }: FetcherAdditional) {
408-
return new Promise(function (resolve, reject) {
412+
return new Promise(function (_resolve, reject) {
409413
signal.addEventListener('abort', function () {
410414
reject(err)
411415
})
412-
void new Promise((r) => setTimeout(r, 200)).then(function () {
413-
resolve('example')
414-
})
415416
})
416417
}
417418

@@ -422,17 +423,14 @@ describe.concurrent('query', function () {
422423
await expect(() => result).rejects.toThrowError(err)
423424
})
424425

425-
it('can abort query 2', async ({ expect }) => {
426+
it('can abort query with array key', async ({ expect }) => {
426427
const err = new Error('aborted')
427428

428429
function fetcher(_key: string, { signal }: FetcherAdditional) {
429-
return new Promise(function (resolve, reject) {
430+
return new Promise(function (_resolve, reject) {
430431
signal.addEventListener('abort', function () {
431432
reject(err)
432433
})
433-
void new Promise((r) => setTimeout(r, 200)).then(function () {
434-
resolve('example')
435-
})
436434
})
437435
}
438436

@@ -443,17 +441,14 @@ describe.concurrent('query', function () {
443441
await expect(() => result).rejects.toThrowError(err)
444442
})
445443

446-
it('can abort query 3', async ({ expect }) => {
444+
it('can abort all queries', async ({ expect }) => {
447445
const err = new Error('aborted')
448446

449447
function fetcher(_key: string, { signal }: FetcherAdditional) {
450-
return new Promise(function (resolve, reject) {
448+
return new Promise(function (_resolve, reject) {
451449
signal.addEventListener('abort', function () {
452450
reject(err)
453451
})
454-
void new Promise((r) => setTimeout(r, 200)).then(function () {
455-
resolve('example')
456-
})
457452
})
458453
}
459454

@@ -749,24 +744,30 @@ describe.concurrent('query', function () {
749744
expect(event).toBeDefined()
750745
})
751746

752-
it('uses the same promises for the same result', async ({ expect }) => {
753-
async function fetcher() {
754-
await new Promise((r) => setTimeout(r, 100))
755-
return 'works'
747+
it('uses the same promises for the same result', ({ expect, signal }) => {
748+
const controller = new AbortController()
749+
const s = AbortSignal.any([controller.signal, signal])
750+
751+
function fetcher() {
752+
return new Promise(function (resolve) {
753+
s.addEventListener('abort', function () {
754+
resolve('works')
755+
})
756+
})
756757
}
757758

758759
const { query } = createQuery({ fetcher })
759760

760761
const promise = query<string>('/')
761762
const promise2 = query<string>('/')
762763

763-
expect(promise === promise2).toBeTruthy()
764+
expect(promise).toBe(promise2)
764765

765-
await new Promise((r) => setTimeout(r, 150))
766+
controller.abort()
766767

767768
const promise3 = query<string>('/')
768769

769-
expect(promise === promise3).toBeTruthy()
770+
expect(promise).toBe(promise3)
770771
})
771772

772773
it('can use multiple queries', async function ({ expect }) {

0 commit comments

Comments
 (0)