✨ feat(App): add ErrorPage
This commit is contained in:
+2
-1
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export { default } from './ErrorPage'
|
||||||
@@ -1 +1,3 @@
|
|||||||
export { default as MainPage } from './MainPage'
|
export { default as MainPage } from './MainPage'
|
||||||
|
|
||||||
|
export { default as ErrorPage } from './ErrorPage'
|
||||||
|
|||||||
Reference in New Issue
Block a user