Jelajahi Sumber

add layout test (#2499)

* add layout test

* change judge to tagName
陈帅 7 tahun lalu
induk
melakukan
d393c29d92
2 mengubah file dengan 63 tambahan dan 2 penghapusan
  1. 2 2
      src/components/GlobalFooter/index.js
  2. 61 0
      src/e2e/layout.e2e.js

+ 2 - 2
src/components/GlobalFooter/index.js

@@ -5,7 +5,7 @@ import styles from './index.less';
 const GlobalFooter = ({ className, links, copyright }) => {
   const clsString = classNames(styles.globalFooter, className);
   return (
-    <div className={clsString}>
+    <footer className={clsString}>
       {links && (
         <div className={styles.links}>
           {links.map(link => (
@@ -21,7 +21,7 @@ const GlobalFooter = ({ className, links, copyright }) => {
         </div>
       )}
       {copyright && <div className={styles.copyright}>{copyright}</div>}
-    </div>
+    </footer>
   );
 };
 

+ 61 - 0
src/e2e/layout.e2e.js

@@ -0,0 +1,61 @@
+import puppeteer from 'puppeteer';
+import RouterConfig from '../../config/router.config';
+
+function formatter(data) {
+  return data
+    .reduce((pre, item) => {
+      if (item.routes) {
+        return pre.concat(formatter(item.routes));
+      }
+      pre.push(item.path);
+      return pre;
+    }, [])
+    .filter(item => item);
+}
+
+describe('Homepage', () => {
+  let browser;
+  let page;
+
+  const testAllPage = async layout =>
+    new Promise(async (resolve, reject) => {
+      const loadPage = async index => {
+        const path = layout[index];
+        try {
+          await page.goto(`http://localhost:8000${path}`, { waitUntil: 'networkidle2' });
+          const haveFooter = await page.evaluate(
+            () => document.getElementsByTagName('footer').length > 0
+          );
+
+          expect(haveFooter).toBeTruthy();
+
+          if (index < layout.length - 1) {
+            loadPage(index + 1);
+          } else {
+            resolve('ok');
+          }
+        } catch (error) {
+          reject(error);
+        }
+      };
+      loadPage(0);
+    });
+
+  beforeAll(async () => {
+    browser = await puppeteer.launch({ args: ['--no-sandbox'] });
+    page = await browser.newPage();
+    jest.setTimeout(1000000);
+  });
+
+  it('test user layout', async () => {
+    const userLayout = formatter(RouterConfig[0].routes);
+    await testAllPage(userLayout);
+  });
+
+  it('test base layout', async () => {
+    const baseLayout = formatter(RouterConfig[1].routes);
+    await testAllPage(baseLayout);
+  });
+
+  afterAll(() => browser.close());
+});