keepalive.spec.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import path from 'node:path'
  2. import {
  3. E2E_TIMEOUT,
  4. setupPuppeteer,
  5. } from '../../../packages/vue/__tests__/e2e/e2eUtils'
  6. import connect from 'connect'
  7. import sirv from 'sirv'
  8. const { page, html, click, value, enterValue } = setupPuppeteer()
  9. describe('vapor keepalive', () => {
  10. let server: any
  11. const port = '8197'
  12. beforeAll(() => {
  13. server = connect()
  14. .use(sirv(path.resolve(import.meta.dirname, '../dist')))
  15. .listen(port)
  16. process.on('SIGTERM', () => server && server.close())
  17. })
  18. beforeEach(async () => {
  19. const baseUrl = `http://localhost:${port}/keepalive/`
  20. await page().goto(baseUrl)
  21. await page().waitForSelector('#app')
  22. })
  23. afterAll(() => {
  24. server.close()
  25. })
  26. test(
  27. 'render vdom component',
  28. async () => {
  29. const testSelector = '.render-vdom-component'
  30. const btnShow = `${testSelector} .btn-show`
  31. const btnToggle = `${testSelector} .btn-toggle`
  32. const container = `${testSelector} > div`
  33. const inputSelector = `${testSelector} input`
  34. let calls = await page().evaluate(() => {
  35. return (window as any).getCalls()
  36. })
  37. expect(calls).toStrictEqual(['mounted', 'activated'])
  38. expect(await html(container)).toBe('<input type="text">')
  39. expect(await value(inputSelector)).toBe('vdom')
  40. // change input value
  41. await enterValue(inputSelector, 'changed')
  42. expect(await value(inputSelector)).toBe('changed')
  43. // deactivate
  44. await click(btnToggle)
  45. expect(await html(container)).toBe('')
  46. calls = await page().evaluate(() => {
  47. return (window as any).getCalls()
  48. })
  49. expect(calls).toStrictEqual(['deactivated'])
  50. // activate
  51. await click(btnToggle)
  52. expect(await html(container)).toBe('<input type="text">')
  53. expect(await value(inputSelector)).toBe('changed')
  54. calls = await page().evaluate(() => {
  55. return (window as any).getCalls()
  56. })
  57. expect(calls).toStrictEqual(['activated'])
  58. // unmount keepalive
  59. await click(btnShow)
  60. expect(await html(container)).toBe('')
  61. calls = await page().evaluate(() => {
  62. return (window as any).getCalls()
  63. })
  64. expect(calls).toStrictEqual(['deactivated', 'unmounted'])
  65. // mount keepalive
  66. await click(btnShow)
  67. expect(await html(container)).toBe('<input type="text">')
  68. expect(await value(inputSelector)).toBe('vdom')
  69. calls = await page().evaluate(() => {
  70. return (window as any).getCalls()
  71. })
  72. expect(calls).toStrictEqual(['mounted', 'activated'])
  73. },
  74. E2E_TIMEOUT,
  75. )
  76. })