Skip to content

Commit 7a1de66

Browse files
committed
02/01: simplify routes inference
1 parent c943c6b commit 7a1de66

File tree

2 files changed

+8
-27
lines changed

2 files changed

+8
-27
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { test, expect } from '#tests/test-extend.ts'
22

33
test('...', async ({ navigate }) => {
4-
await navigate('/')
4+
await navigate('/login')
5+
await navigate('/users/:username/notes')
56
})

exercises/02.test-setup/01.solution.fixtures/tests/test-extend.ts

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,17 @@
11
import { test as testBase, expect } from '@playwright/test'
2-
import { type Register, generatePath } from 'react-router'
3-
4-
type Pages = Register['pages']
5-
6-
type Routes<P extends Record<string, any>> = {
7-
[K in keyof P]: K & string
8-
}[keyof P] & {}
9-
10-
type Params<
11-
R extends string,
12-
Pages extends Record<string, any>,
13-
> = keyof Pages[R]['params'] extends never ? never : Pages[R]['params']
2+
import { href, type Register } from 'react-router'
143

154
interface Fixtures {
16-
navigate: <R extends Routes<Pages>>(
17-
...args: [Params<R, Pages>] extends [never]
18-
? [route: R, params?: never]
19-
: [route: R, params: Params<R, Pages>]
5+
navigate: <T extends keyof Register['pages']>(
6+
...args: Parameters<typeof href<T>>
207
) => Promise<void>
218
}
229

2310
export const test = testBase.extend<Fixtures>({
2411
async navigate({ page }, use) {
25-
await use(
26-
async (
27-
...args:
28-
| [route: string, route?: never]
29-
| [route: string, params: Record<string, any>]
30-
) => {
31-
const [route, params] = args
32-
await page.goto(generatePath(route, params))
33-
},
34-
)
12+
await use(async (...args) => {
13+
await page.goto(href(...args))
14+
})
3515
},
3616
})
3717

0 commit comments

Comments
 (0)