Form.spec.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { describe, it, expect, vi } from 'vitest'
  2. import { mount } from '@vue/test-utils'
  3. import Form from '../Form/index.vue'
  4. // Мокаем анимации
  5. vi.mock('animate.css', () => ({
  6. default: {}
  7. }))
  8. describe('Form', () => {
  9. it('рендерит форму с типом 0 (простое сообщение)', async () => {
  10. const wrapper = mount(Form, {
  11. props: {
  12. formType: 0,
  13. formMessage: 'Тестовое сообщение',
  14. isVisible: true
  15. },
  16. global: {
  17. stubs: {
  18. Teleport: {
  19. template: '<div><slot /></div>'
  20. }
  21. }
  22. }
  23. })
  24. // Ждем рендеринга
  25. await wrapper.vm.$nextTick()
  26. await new Promise(resolve => setTimeout(resolve, 0))
  27. const form = wrapper.find('form')
  28. expect(form.exists()).toBe(true)
  29. expect(form.text()).toContain('Тестовое сообщение')
  30. expect(form.find('button[type="submit"]').exists()).toBe(true)
  31. })
  32. it('рендерит форму с типом -1 (произвольный контент)', async () => {
  33. const wrapper = mount(Form, {
  34. props: {
  35. formType: -1,
  36. isVisible: true
  37. },
  38. slots: {
  39. default: '<div>Произвольный контент</div>'
  40. },
  41. global: {
  42. stubs: {
  43. Teleport: {
  44. template: '<div><slot /></div>'
  45. }
  46. }
  47. }
  48. })
  49. // Ждем рендеринга
  50. await wrapper.vm.$nextTick()
  51. await new Promise(resolve => setTimeout(resolve, 0))
  52. const content = wrapper.find('.w-\\[440px\\]')
  53. expect(content.exists()).toBe(true)
  54. expect(content.text()).toContain('Произвольный контент')
  55. expect(content.find('button').exists()).toBe(true)
  56. })
  57. it('эмитит isClosed при закрытии формы', async () => {
  58. const wrapper = mount(Form, {
  59. props: {
  60. formType: 0,
  61. formMessage: 'Тестовое сообщение',
  62. isVisible: true
  63. },
  64. global: {
  65. stubs: {
  66. Teleport: {
  67. template: '<div><slot /></div>'
  68. }
  69. }
  70. }
  71. })
  72. // Ждем рендеринга
  73. await wrapper.vm.$nextTick()
  74. await new Promise(resolve => setTimeout(resolve, 0))
  75. const form = wrapper.find('form')
  76. expect(form.exists()).toBe(true)
  77. await form.trigger('submit')
  78. expect(wrapper.emitted('isClosed')).toBeTruthy()
  79. })
  80. it('закрывает форму при клике на кнопку Ок в типе -1', async () => {
  81. const wrapper = mount(Form, {
  82. props: {
  83. formType: -1,
  84. isVisible: true
  85. },
  86. global: {
  87. stubs: {
  88. Teleport: {
  89. template: '<div><slot /></div>'
  90. }
  91. }
  92. }
  93. })
  94. // Ждем рендеринга
  95. await wrapper.vm.$nextTick()
  96. await new Promise(resolve => setTimeout(resolve, 0))
  97. const button = wrapper.find('button')
  98. expect(button.exists()).toBe(true)
  99. await button.trigger('click')
  100. expect(wrapper.vm.isVisible).toBe(false)
  101. })
  102. })