vShow.spec.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { children, on, template, vShow, withDirectives } from '../src'
  2. import { nextTick, ref } from 'vue'
  3. import { describe, expect, test } from 'vitest'
  4. import { makeRender } from './_utils'
  5. const define = makeRender()
  6. const createDemo = (defaultValue: boolean) =>
  7. define(() => {
  8. const visible = ref(defaultValue)
  9. function handleClick() {
  10. visible.value = !visible.value
  11. }
  12. const t0 = template('<button>toggle</button><h1>hello world</h1>')
  13. const n0 = t0()
  14. const n1 = children(n0, 0)
  15. const n2 = children(n0, 1)
  16. withDirectives(n2, [[vShow, () => visible.value]])
  17. on(n1 as HTMLElement, 'click', () => handleClick)
  18. return n0
  19. })
  20. describe('directive: v-show', () => {
  21. test('basic', async () => {
  22. const { host } = createDemo(true).render()
  23. const btn = host.querySelector('button')
  24. expect(host.innerHTML).toBe('<button>toggle</button><h1>hello world</h1>')
  25. btn?.click()
  26. await nextTick()
  27. expect(host.innerHTML).toBe(
  28. '<button>toggle</button><h1 style="display: none;">hello world</h1>',
  29. )
  30. })
  31. test('should hide content when default value is false', async () => {
  32. const { host } = createDemo(false).render()
  33. const btn = host.querySelector('button')
  34. const h1 = host.querySelector('h1')
  35. expect(h1?.style.display).toBe('none')
  36. btn?.click()
  37. await nextTick()
  38. expect(h1?.style.display).toBe('')
  39. })
  40. })