breadcrumb.test.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { mount } from '@vue/test-utils'
  2. import { describe, expect, it, vi } from 'vitest'
  3. import { Check } from '@element-plus/icons-vue'
  4. import Breadcrumb from '../src/breadcrumb.vue'
  5. import BreadcrumbItem from '../src/breadcrumb-item.vue'
  6. import type { VNode } from 'vue'
  7. const _mount = (render: () => VNode, $router = {}) =>
  8. mount(render, {
  9. global: {
  10. provide: {
  11. breadcrumb: {},
  12. },
  13. config: {
  14. globalProperties: {
  15. $router,
  16. },
  17. },
  18. },
  19. })
  20. describe('Breadcrumb.vue', () => {
  21. it('separator', () => {
  22. const wrapper = _mount(() => (
  23. <Breadcrumb separator="?">
  24. <BreadcrumbItem>A</BreadcrumbItem>
  25. </Breadcrumb>
  26. ))
  27. expect(wrapper.find('.el-breadcrumb__separator').text()).toBe('?')
  28. })
  29. it('separatorIcon', () => {
  30. const wrapper = _mount(() => (
  31. <Breadcrumb separatorIcon={Check}>
  32. <BreadcrumbItem>A</BreadcrumbItem>
  33. </Breadcrumb>
  34. ))
  35. expect(wrapper.find('.el-breadcrumb__separator').text()).toBe('')
  36. expect(wrapper.findComponent(Check).exists()).toBe(true)
  37. })
  38. it('to', () => {
  39. const wrapper = _mount(() => (
  40. <Breadcrumb separator="?" separatorIcon={Check}>
  41. <BreadcrumbItem to="/index">A</BreadcrumbItem>
  42. </Breadcrumb>
  43. ))
  44. expect(wrapper.find('.el-breadcrumb__inner').classes()).toContain('is-link')
  45. })
  46. it('single', () => {
  47. const wrapper = _mount(() => <BreadcrumbItem>A</BreadcrumbItem>)
  48. expect(wrapper.find('.el-breadcrumb__inner').text()).toBe('A')
  49. expect(wrapper.find('.el-breadcrumb__separator').text()).toBe('')
  50. })
  51. describe('BreadcrumbItem', () => {
  52. it('should set the last item as current page', () => {
  53. const wrapper = _mount(() => (
  54. <Breadcrumb>
  55. <BreadcrumbItem>A</BreadcrumbItem>
  56. <BreadcrumbItem>B</BreadcrumbItem>
  57. </Breadcrumb>
  58. ))
  59. const items = wrapper.findAllComponents(BreadcrumbItem)
  60. expect(items.at(1)!.element.getAttribute('aria-current')).toBe('page')
  61. })
  62. it('click event', async () => {
  63. const replace = vi.fn()
  64. const push = vi.fn()
  65. let wrapper = _mount(
  66. () => (
  67. <Breadcrumb>
  68. <BreadcrumbItem to="/path">A</BreadcrumbItem>
  69. </Breadcrumb>
  70. ),
  71. {
  72. replace,
  73. push,
  74. }
  75. )
  76. await wrapper.find('.el-breadcrumb__inner').trigger('click')
  77. expect(push).toHaveBeenCalled()
  78. wrapper.unmount()
  79. wrapper = _mount(
  80. () => (
  81. <Breadcrumb>
  82. <BreadcrumbItem to="/path" replace>
  83. A
  84. </BreadcrumbItem>
  85. </Breadcrumb>
  86. ),
  87. {
  88. replace,
  89. push,
  90. }
  91. )
  92. await wrapper.find('.el-breadcrumb__inner').trigger('click')
  93. expect(replace).toHaveBeenCalled()
  94. })
  95. })
  96. })