demo.spec.puppeteer.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import path from 'path'
  2. import { createApp } from 'vue'
  3. import { renderToString } from '@vue/server-renderer'
  4. import { afterAll, beforeAll, describe, expect, it } from 'vitest'
  5. import puppeteer from 'puppeteer'
  6. import glob from 'fast-glob'
  7. import ElementPlus, { ID_INJECTION_KEY } from '../dist/element-plus'
  8. import type { Browser } from 'puppeteer'
  9. const projectRoot = process.cwd()
  10. const testRoot = path.resolve(projectRoot, 'ssr-testing')
  11. const demoRoot = path.resolve(testRoot, 'cases')
  12. describe('Cypress Button', () => {
  13. let browser: Browser
  14. beforeAll(async () => {
  15. browser = await puppeteer.launch()
  16. })
  17. afterAll(() => {
  18. browser.close()
  19. })
  20. describe('when initialized', () => {
  21. const demoPaths = glob
  22. .sync(`${demoRoot}/*.vue`)
  23. .map((demo) => demo.slice(demoRoot.length + 1))
  24. it.each(demoPaths)(`render %s correctly`, async (demoPath) => {
  25. const page = await browser.newPage()
  26. await page.goto(`file://${projectRoot}/ssr-testing/index.html`)
  27. await page.addStyleTag({
  28. path: path.join(
  29. projectRoot,
  30. 'dist',
  31. 'element-plus',
  32. 'dist',
  33. 'index.css'
  34. ),
  35. })
  36. const { default: Demo } = await import(path.join(demoRoot, demoPath))
  37. const app = createApp(<Demo />)
  38. .use(ElementPlus)
  39. .provide(ID_INJECTION_KEY, {
  40. prefix: 100,
  41. current: 0,
  42. })
  43. const html = await renderToString(app)
  44. await page.evaluate((innerHTML) => {
  45. document.querySelector('#root')!.innerHTML = innerHTML
  46. }, html)
  47. // SSR testing don't need screenshots.
  48. // const screenshotPath = demoPath
  49. // .split('/')
  50. // .join('-')
  51. // .replace(/\.vue$/, '.png')
  52. // await page.screenshot({
  53. // path: path.join(testRoot, 'screenshots', screenshotPath),
  54. // fullPage: true,
  55. // })
  56. await page.close()
  57. expect(true).toBe(true)
  58. })
  59. })
  60. })