rendererComponent.spec.ts 989 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {
  2. ref,
  3. h,
  4. render,
  5. nodeOps,
  6. serializeInner,
  7. nextTick,
  8. VNode
  9. } from '@vue/runtime-test'
  10. describe('renderer: component', () => {
  11. test('should update parent(hoc) component host el when child component self update', async () => {
  12. const value = ref(true)
  13. let parentVnode: VNode
  14. let childVnode1: VNode
  15. let childVnode2: VNode
  16. const Parent = {
  17. render: () => {
  18. // let Parent first rerender
  19. return (parentVnode = h(Child))
  20. }
  21. }
  22. const Child = {
  23. render: () => {
  24. return value.value
  25. ? (childVnode1 = h('div'))
  26. : (childVnode2 = h('span'))
  27. }
  28. }
  29. const root = nodeOps.createElement('div')
  30. render(h(Parent), root)
  31. expect(serializeInner(root)).toBe(`<div></div>`)
  32. expect(parentVnode!.el).toBe(childVnode1!.el)
  33. value.value = false
  34. await nextTick()
  35. expect(serializeInner(root)).toBe(`<span></span>`)
  36. expect(parentVnode!.el).toBe(childVnode2!.el)
  37. })
  38. })