♻️ refactor(App): use react router
this adds `MainPage`
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
#root {
|
||||
max-width: 1280px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.logo {
|
||||
height: 6em;
|
||||
padding: 1.5em;
|
||||
will-change: filter;
|
||||
transition: filter 300ms;
|
||||
}
|
||||
.logo:hover {
|
||||
filter: drop-shadow(0 0 2em #646cffaa);
|
||||
}
|
||||
.logo.react:hover {
|
||||
filter: drop-shadow(0 0 2em #61dafbaa);
|
||||
}
|
||||
|
||||
@keyframes logo-spin {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
a:nth-of-type(2) .logo {
|
||||
animation: logo-spin infinite 20s linear;
|
||||
}
|
||||
}
|
||||
|
||||
.card {
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
.read-the-docs {
|
||||
color: #888;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
import { describe, it, expect, afterEach } from 'vitest'
|
||||
import { render, screen, cleanup } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
|
||||
import MainPage from './MainPage'
|
||||
|
||||
// Tests
|
||||
describe('Renders main page correctly', async () => {
|
||||
/**
|
||||
* Resets all renders after each test
|
||||
*/
|
||||
afterEach(() => {
|
||||
cleanup()
|
||||
})
|
||||
|
||||
/**
|
||||
* Passes - shows title correctly
|
||||
*/
|
||||
it('Should render the page correctly', async () => {
|
||||
// Setup
|
||||
await render(<MainPage />)
|
||||
const h1 = await screen.queryByText('Vite + React')
|
||||
|
||||
// Post Expectations
|
||||
expect(h1).toBeInTheDocument()
|
||||
})
|
||||
|
||||
/**
|
||||
* Passes - shows the button count correctly present
|
||||
*/
|
||||
it('Should show the button count set to 0', async () => {
|
||||
// Setup
|
||||
await render(<MainPage />)
|
||||
const button = await screen.queryByText('count is 0')
|
||||
|
||||
// Expectations
|
||||
expect(button).toBeInTheDocument()
|
||||
})
|
||||
|
||||
/**
|
||||
* Passes - clicks the button 3 times and shows the correct count
|
||||
*/
|
||||
it('Should show the button count set to 3', async () => {
|
||||
// Setup
|
||||
const user = userEvent.setup()
|
||||
await render(<MainPage />)
|
||||
const button = await screen.queryByText('count is 0')
|
||||
|
||||
// Pre Expectations
|
||||
expect(button).toBeInTheDocument()
|
||||
|
||||
// Actions
|
||||
await user.click(button as HTMLElement)
|
||||
await user.click(button as HTMLElement)
|
||||
await user.click(button as HTMLElement)
|
||||
|
||||
// Post Expectations
|
||||
expect(button?.innerHTML).toBe('count is 3')
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,31 @@
|
||||
import { useState } from 'react'
|
||||
import reactLogo from 'assets/react.svg'
|
||||
import viteLogo from '/vite.svg'
|
||||
import './MainPage.css'
|
||||
|
||||
function MainPage() {
|
||||
const [count, setCount] = useState(0)
|
||||
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
<a href="https://vitejs.dev" target="_blank">
|
||||
<img src={viteLogo} className="logo" alt="Vite logo" />
|
||||
</a>
|
||||
<a href="https://react.dev" target="_blank">
|
||||
<img src={reactLogo} className="logo react" alt="React logo" />
|
||||
</a>
|
||||
</div>
|
||||
<h1>Vite + React</h1>
|
||||
<div className="card">
|
||||
<button onClick={() => setCount(count => count + 1)}>count is {count}</button>
|
||||
<p>
|
||||
Edit <code>src/App.tsx</code> and save to test HMR
|
||||
</p>
|
||||
</div>
|
||||
<p className="read-the-docs">Click on the Vite and React logos to learn more</p>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default MainPage
|
||||
@@ -0,0 +1 @@
|
||||
export { default } from './MainPage'
|
||||
@@ -0,0 +1 @@
|
||||
export { default as MainPage } from './MainPage'
|
||||
Reference in New Issue
Block a user