From ccf9c8d4876813e7d7bd1b068b129cb87017fd7d Mon Sep 17 00:00:00 2001 From: sand4rt Date: Tue, 8 Nov 2022 17:40:06 +0100 Subject: [PATCH] test(ct): react router (#18602) --- tests/components/ct-react/package.json | 7 +++- tests/components/ct-react/src/App.css | 38 ------------------ tests/components/ct-react/src/App.tsx | 39 ++++++++----------- tests/components/ct-react/src/index.js | 5 ++- .../ct-react/src/pages/DashboardPage.tsx | 3 ++ .../ct-react/src/pages/LoginPage.tsx | 3 ++ tests/components/ct-react/src/tests.spec.tsx | 11 ++++++ 7 files changed, 42 insertions(+), 64 deletions(-) delete mode 100644 tests/components/ct-react/src/App.css create mode 100644 tests/components/ct-react/src/pages/DashboardPage.tsx create mode 100644 tests/components/ct-react/src/pages/LoginPage.tsx diff --git a/tests/components/ct-react/package.json b/tests/components/ct-react/package.json index d7012b6af0..abaa43fbd8 100644 --- a/tests/components/ct-react/package.json +++ b/tests/components/ct-react/package.json @@ -3,11 +3,14 @@ "version": "0.1.0", "private": true, "dependencies": { + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-router-dom": "^6.4.2" + }, + "devDependencies": { "@types/node": "^16.11.26", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.13", - "react": "^17.0.2", - "react-dom": "^17.0.2", "react-scripts": "5.0.0", "typescript": "^4.6.2" }, diff --git a/tests/components/ct-react/src/App.css b/tests/components/ct-react/src/App.css deleted file mode 100644 index 74b5e05345..0000000000 --- a/tests/components/ct-react/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/tests/components/ct-react/src/App.tsx b/tests/components/ct-react/src/App.tsx index fa51be8aaa..5f4afe2236 100644 --- a/tests/components/ct-react/src/App.tsx +++ b/tests/components/ct-react/src/App.tsx @@ -1,25 +1,20 @@ +import { Routes, Route, Link } from 'react-router-dom'; import logo from './assets/logo.svg'; -import './App.css'; +import LoginPage from './pages/LoginPage'; +import DashboardPage from './pages/DashboardPage'; -function App() { - return ( -
-
- logo -

- Edit src/App.tsx and save to reload. -

- - Learn React - -
-
- ); +export default function App() { + return <> +
+ logo + Login + Dashboard +
+ + + } /> + } /> + + + } - -export default App; diff --git a/tests/components/ct-react/src/index.js b/tests/components/ct-react/src/index.js index 9705643d88..34f6873778 100644 --- a/tests/components/ct-react/src/index.js +++ b/tests/components/ct-react/src/index.js @@ -1,11 +1,12 @@ import React from 'react'; import ReactDOM from 'react-dom'; -import './App.css'; +import { BrowserRouter } from 'react-router-dom'; import App from './App'; +import './assets/index.css'; ReactDOM.render( - + , document.getElementById('root') ); diff --git a/tests/components/ct-react/src/pages/DashboardPage.tsx b/tests/components/ct-react/src/pages/DashboardPage.tsx new file mode 100644 index 0000000000..64307e87f3 --- /dev/null +++ b/tests/components/ct-react/src/pages/DashboardPage.tsx @@ -0,0 +1,3 @@ +export default function DashboardPage() { + return
Dashboard
+} diff --git a/tests/components/ct-react/src/pages/LoginPage.tsx b/tests/components/ct-react/src/pages/LoginPage.tsx new file mode 100644 index 0000000000..96adc431ed --- /dev/null +++ b/tests/components/ct-react/src/pages/LoginPage.tsx @@ -0,0 +1,3 @@ +export default function LoginPage() { + return
Login
+} diff --git a/tests/components/ct-react/src/tests.spec.tsx b/tests/components/ct-react/src/tests.spec.tsx index b1722bedde..9d7c882269 100644 --- a/tests/components/ct-react/src/tests.spec.tsx +++ b/tests/components/ct-react/src/tests.spec.tsx @@ -1,5 +1,7 @@ import { test, expect } from '@playwright/experimental-ct-react'; const { serverFixtures } = require('../../../../tests/config/serverFixtures'); +import { BrowserRouter } from 'react-router-dom'; +import App from './App'; import Fetch from './components/Fetch'; import DelayedData from './components/DelayedData'; import Button from './components/Button'; @@ -148,6 +150,15 @@ test('get textContent of the empty fragment', async ({ mount }) => { await expect(component).toHaveText(''); }); +test('navigate to a page by clicking a link', async ({ page, mount }) => { + const component = await mount(); + await expect(component.getByRole('main')).toHaveText('Login'); + await expect(page).toHaveURL('/'); + await component.getByRole('link', { name: 'Dashboard' }).click(); + await expect(component.getByRole('main')).toHaveText('Dashboard'); + await expect(page).toHaveURL('/dashboard'); +}); + const testWithServer = test.extend(serverFixtures); testWithServer('components routing should go through context', async ({ mount, context, server }) => { server.setRoute('/hello', (req: any, res: any) => {