✨ feat(App): add ErrorPage

This commit is contained in:
2024-01-20 12:34:09 +01:00
parent d415b924d2
commit 654673deea
5 changed files with 55 additions and 1 deletions
+2 -1
View File
@@ -1,11 +1,12 @@
import { createBrowserRouter, RouterProvider } from 'react-router-dom' import { createBrowserRouter, RouterProvider } from 'react-router-dom'
import { MainPage } from 'components/pages' import { ErrorPage, MainPage } from 'components/pages'
const router = createBrowserRouter([ const router = createBrowserRouter([
{ {
path: '/', path: '/',
element: <MainPage />, element: <MainPage />,
errorElement: <ErrorPage />,
}, },
]) ])
@@ -0,0 +1,28 @@
import { describe, it, expect, afterEach } from 'vitest'
import { screen, cleanup, render } from '@testing-library/react'
import { RouterProvider, createMemoryRouter } from 'react-router-dom'
import ErrorPage from './ErrorPage'
// Tests
describe('Renders ErrorPage correctly', async () => {
/**
* Resets all renders after each test
*/
afterEach(() => {
cleanup()
})
/**
* Passes - shows title correctly
*/
it('Should render the error page correctly', () => {
const router = createMemoryRouter([{ path: '/', element: <div />, errorElement: <ErrorPage /> }], { initialEntries: ['/some/bad/route'] })
render(<RouterProvider router={router} />)
expect(screen.getByText('Oops!')).toBeInTheDocument()
expect(screen.getByText('Sorry, an unexpected error has occurred.')).toBeInTheDocument()
expect(screen.getByText('404 Not Found')).toBeInTheDocument()
})
})
@@ -0,0 +1,22 @@
import { isRouteErrorResponse, useRouteError } from 'react-router-dom'
const ErrorPage: React.FC = () => {
const error: unknown = useRouteError()
if (isRouteErrorResponse(error)) {
return (
<div id="error-page" className="flex flex-col gap-8 justify-center items-center h-screen">
<h1 className="text-4xl font-bold">Oops!</h1>
<p>Sorry, an unexpected error has occurred.</p>
{isRouteErrorResponse(error) && (
<p className="text-slate-400">
<i>
{error.status} {error.statusText}
</i>
</p>
)}
</div>
)
}
}
export default ErrorPage
+1
View File
@@ -0,0 +1 @@
export { default } from './ErrorPage'
+2
View File
@@ -1 +1,3 @@
export { default as MainPage } from './MainPage' export { default as MainPage } from './MainPage'
export { default as ErrorPage } from './ErrorPage'