Select.spec.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { describe, it, expect } from 'vitest'
  2. import { mount } from '@vue/test-utils'
  3. import Select from '../Base/Select.vue'
  4. describe('Select', () => {
  5. it('рендерит список строковых опций', () => {
  6. const options = ['Опция 1', 'Опция 2', 'Опция 3']
  7. const wrapper = mount(Select, {
  8. props: {
  9. data: options
  10. }
  11. })
  12. expect(wrapper.findAll('p').length).toBe(3)
  13. expect(wrapper.text()).toContain('Опция 1')
  14. expect(wrapper.text()).toContain('Опция 2')
  15. expect(wrapper.text()).toContain('Опция 3')
  16. })
  17. it('рендерит список объектов с id и name', () => {
  18. const options = [
  19. { id: 1, name: 'Опция 1' },
  20. { id: 2, name: 'Опция 2' },
  21. { id: 3, name: 'Опция 3' }
  22. ]
  23. const wrapper = mount(Select, {
  24. props: {
  25. data: options,
  26. id: 'id',
  27. name: 'name'
  28. }
  29. })
  30. expect(wrapper.findAll('p').length).toBe(3)
  31. expect(wrapper.text()).toContain('Опция 1')
  32. expect(wrapper.text()).toContain('Опция 2')
  33. expect(wrapper.text()).toContain('Опция 3')
  34. })
  35. it('выбирает опцию при клике', async () => {
  36. const options = ['Опция 1', 'Опция 2', 'Опция 3']
  37. const wrapper = mount(Select, {
  38. props: {
  39. data: options
  40. }
  41. })
  42. await wrapper.findAll('div')[1].trigger('click')
  43. expect(wrapper.vm.selected).toBe('Опция 1')
  44. await wrapper.findAll('div')[2].trigger('click')
  45. expect(wrapper.vm.selected).toBe('Опция 2')
  46. })
  47. it('выбирает объект при клике', async () => {
  48. const options = [
  49. { id: 1, name: 'Опция 1' },
  50. { id: 2, name: 'Опция 2' },
  51. { id: 3, name: 'Опция 3' }
  52. ]
  53. const wrapper = mount(Select, {
  54. props: {
  55. data: options,
  56. id: 'id',
  57. name: 'name'
  58. }
  59. })
  60. await wrapper.findAll('div')[1].trigger('click')
  61. expect(wrapper.vm.selected).toBe(1)
  62. await wrapper.findAll('div')[2].trigger('click')
  63. expect(wrapper.vm.selected).toBe(2)
  64. })
  65. it('применяет правильные стили для выбранной опции', async () => {
  66. const options = ['Опция 1', 'Опция 2', 'Опция 3']
  67. const wrapper = mount(Select, {
  68. props: {
  69. data: options
  70. }
  71. })
  72. await wrapper.findAll('div')[2].trigger('click')
  73. const selectedOption = wrapper.findAll('p')[1]
  74. expect(selectedOption.classes()).toContain('text-primary')
  75. })
  76. it('отображает галочку для выбранной опции', async () => {
  77. const options = ['Опция 1', 'Опция 2', 'Опция 3']
  78. const wrapper = mount(Select, {
  79. props: {
  80. data: options
  81. }
  82. })
  83. await wrapper.findAll('div')[2].trigger('click')
  84. const checkmark = wrapper.findAll('path')[1]
  85. expect(checkmark.attributes('stroke')).toBe('#FF4646')
  86. })
  87. })