Skip to content

Commit c37d643

Browse files
ferretwithaberetschiller-manuel
authored andcommitted
add e2e test for useCanGoBack
1 parent 1fbb39f commit c37d643

File tree

2 files changed

+84
-2
lines changed

2 files changed

+84
-2
lines changed

e2e/react-router/basic-file-based/src/routes/__root.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import * as React from 'react'
2-
import { Link, Outlet, createRootRoute } from '@tanstack/react-router'
2+
import {
3+
Link,
4+
Outlet,
5+
createRootRoute,
6+
useCanGoBack,
7+
useRouter,
8+
} from '@tanstack/react-router'
39
import { TanStackRouterDevtools } from '@tanstack/router-devtools'
410

511
export const Route = createRootRoute({
@@ -15,9 +21,15 @@ export const Route = createRootRoute({
1521
})
1622

1723
function RootComponent() {
24+
const router = useRouter()
25+
const canGoBack = useCanGoBack()
26+
1827
return (
1928
<>
20-
<div className="p-2 flex gap-2 text-lg border-b">
29+
<div className="flex gap-2 p-2 text-lg border-b">
30+
<button disabled={!canGoBack} onClick={() => router.history.back()}>
31+
Back
32+
</button>{' '}
2133
<Link
2234
to="/"
2335
activeProps={{

e2e/react-router/basic-file-based/tests/app.spec.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,76 @@ test('legacy Proceeding through blocked navigation works', async ({ page }) => {
107107
await expect(page.getByRole('heading')).toContainText('Editing A')
108108
})
109109

110+
test('useCanGoBack correctly disables back button', async ({ page }) => {
111+
const getBackButtonDisabled = async () => {
112+
const backButton = await page.getByRole('button', { name: 'Back' })
113+
const isDisabled = (await backButton.getAttribute('disabled')) !== null
114+
return isDisabled
115+
}
116+
117+
await expect(await getBackButtonDisabled()).toBe(true)
118+
119+
await page.getByRole('link', { name: 'Posts' }).click()
120+
await expect(await getBackButtonDisabled()).toBe(false)
121+
122+
await page.getByRole('link', { name: 'sunt aut facere repe' }).click()
123+
await expect(await getBackButtonDisabled()).toBe(false)
124+
125+
await page.reload()
126+
await expect(await getBackButtonDisabled()).toBe(false)
127+
128+
await page.goBack()
129+
await expect(await getBackButtonDisabled()).toBe(false)
130+
131+
await page.goForward()
132+
await expect(await getBackButtonDisabled()).toBe(false)
133+
134+
await page.goBack()
135+
await expect(await getBackButtonDisabled()).toBe(false)
136+
137+
await page.goBack()
138+
await expect(await getBackButtonDisabled()).toBe(true)
139+
140+
await page.reload()
141+
await expect(await getBackButtonDisabled()).toBe(true)
142+
})
143+
144+
test('useCanGoBack correctly disables back button, using router.history and window.history', async ({
145+
page,
146+
}) => {
147+
const getBackButtonDisabled = async () => {
148+
const backButton = await page.getByRole('button', { name: 'Back' })
149+
const isDisabled = (await backButton.getAttribute('disabled')) !== null
150+
return isDisabled
151+
}
152+
153+
await page.getByRole('link', { name: 'Posts' }).click()
154+
await page.getByRole('link', { name: 'sunt aut facere repe' }).click()
155+
await page.getByRole('button', { name: 'Back' }).click()
156+
await expect(await getBackButtonDisabled()).toBe(false)
157+
158+
await page.reload()
159+
await expect(await getBackButtonDisabled()).toBe(false)
160+
161+
await page.getByRole('button', { name: 'Back' }).click()
162+
await expect(await getBackButtonDisabled()).toBe(true)
163+
164+
await page.evaluate('window.history.forward()')
165+
await expect(await getBackButtonDisabled()).toBe(false)
166+
167+
await page.evaluate('window.history.forward()')
168+
await expect(await getBackButtonDisabled()).toBe(false)
169+
170+
await page.evaluate('window.history.back()')
171+
await expect(await getBackButtonDisabled()).toBe(false)
172+
173+
await page.evaluate('window.history.back()')
174+
await expect(await getBackButtonDisabled()).toBe(true)
175+
176+
await page.reload()
177+
await expect(await getBackButtonDisabled()).toBe(true)
178+
})
179+
110180
const testCases = [
111181
{
112182
description: 'Navigating to a route inside a route group',

0 commit comments

Comments
 (0)