ContactItem.spec.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { describe, it, expect } from 'vitest'
  2. import { mount } from '@vue/test-utils'
  3. import ContactItem from '../Contact/Item.vue'
  4. describe('ContactItem', () => {
  5. const mockContact = {
  6. address: 'Test Address',
  7. email: 'test@example.com',
  8. full_name: 'Test User',
  9. phones: ['+7 (999) 123-45-67'],
  10. post: 'Test Post'
  11. }
  12. it('отображает информацию о контакте', () => {
  13. const wrapper = mount(ContactItem, {
  14. props: {
  15. contact: mockContact
  16. }
  17. })
  18. expect(wrapper.text()).toContain(mockContact.full_name)
  19. expect(wrapper.text()).toContain(mockContact.post)
  20. expect(wrapper.text()).toContain(mockContact.email)
  21. expect(wrapper.text()).toContain(mockContact.phones[0])
  22. })
  23. it('отображает один телефон', () => {
  24. const wrapper = mount(ContactItem, {
  25. props: {
  26. contact: mockContact
  27. }
  28. })
  29. expect(wrapper.text()).toContain('Телефон:')
  30. expect(wrapper.findAll('p').length).toBe(4) // full_name, post, email, phone
  31. })
  32. it('отображает несколько телефонов', () => {
  33. const contactWithMultiplePhones = {
  34. ...mockContact,
  35. phones: ['+7 (999) 123-45-67', '+7 (999) 765-43-21']
  36. }
  37. const wrapper = mount(ContactItem, {
  38. props: {
  39. contact: contactWithMultiplePhones
  40. }
  41. })
  42. expect(wrapper.text()).toContain('Телефоны:')
  43. expect(wrapper.findAll('p').length).toBe(5) // full_name, post, email, phones label, phone
  44. expect(wrapper.text()).toContain(contactWithMultiplePhones.phones[0])
  45. expect(wrapper.text()).toContain(contactWithMultiplePhones.phones[1])
  46. })
  47. it('создает правильную ссылку на почту', () => {
  48. const wrapper = mount(ContactItem, {
  49. props: {
  50. contact: mockContact
  51. }
  52. })
  53. const emailLink = wrapper.find('a')
  54. expect(emailLink.attributes('href')).toBe(`mailto:${mockContact.email}`)
  55. })
  56. it('применяет правильные стили', () => {
  57. const wrapper = mount(ContactItem, {
  58. props: {
  59. contact: mockContact
  60. }
  61. })
  62. expect(wrapper.classes()).toContain('bg-opacity-20')
  63. expect(wrapper.classes()).toContain('rounded-md')
  64. expect(wrapper.find('.text-xl').exists()).toBe(true)
  65. expect(wrapper.find('.text-sm').exists()).toBe(true)
  66. })
  67. })