app.spec.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import { describe, it, expect, vi, beforeEach } from 'vitest'
  2. import { setActivePinia, createPinia } from 'pinia'
  3. import { useAppStore } from '@/store/app'
  4. // Mock i18n
  5. vi.mock('@/locales', () => ({
  6. default: {
  7. global: {
  8. locale: { value: 'zh-cn' }
  9. }
  10. }
  11. }))
  12. describe('App Store', () => {
  13. beforeEach(() => {
  14. setActivePinia(createPinia())
  15. localStorage.clear()
  16. })
  17. describe('初始状态', () => {
  18. it('侧边栏默认应该是展开的', () => {
  19. const store = useAppStore()
  20. expect(store.sidebarOpened).toBe(true)
  21. })
  22. it('loading 默认应该是 false', () => {
  23. const store = useAppStore()
  24. expect(store.loading).toBe(false)
  25. })
  26. it('语言默认应该是 zh-cn', () => {
  27. const store = useAppStore()
  28. expect(store.language).toBe('zh-cn')
  29. })
  30. it('组件尺寸默认应该是 default', () => {
  31. const store = useAppStore()
  32. expect(store.size).toBe('default')
  33. })
  34. })
  35. describe('侧边栏操作', () => {
  36. it('toggleSidebar 应该切换侧边栏状态', () => {
  37. const store = useAppStore()
  38. expect(store.sidebarOpened).toBe(true)
  39. store.toggleSidebar()
  40. expect(store.sidebarOpened).toBe(false)
  41. store.toggleSidebar()
  42. expect(store.sidebarOpened).toBe(true)
  43. })
  44. it('closeSidebar 应该关闭侧边栏', () => {
  45. const store = useAppStore()
  46. store.closeSidebar()
  47. expect(store.sidebarOpened).toBe(false)
  48. })
  49. it('openSidebar 应该打开侧边栏', () => {
  50. const store = useAppStore()
  51. store.closeSidebar()
  52. expect(store.sidebarOpened).toBe(false)
  53. store.openSidebar()
  54. expect(store.sidebarOpened).toBe(true)
  55. })
  56. })
  57. describe('Loading 状态', () => {
  58. it('setLoading 应该设置 loading 状态', () => {
  59. const store = useAppStore()
  60. store.setLoading(true)
  61. expect(store.loading).toBe(true)
  62. store.setLoading(false)
  63. expect(store.loading).toBe(false)
  64. })
  65. })
  66. describe('语言设置', () => {
  67. it('changeLanguage 应该切换语言', () => {
  68. const store = useAppStore()
  69. store.changeLanguage('en')
  70. expect(store.language).toBe('en')
  71. store.changeLanguage('zh-cn')
  72. expect(store.language).toBe('zh-cn')
  73. })
  74. it('changeLanguage 应该保存到 localStorage', () => {
  75. const store = useAppStore()
  76. store.changeLanguage('en')
  77. const saved = localStorage.getItem('language')
  78. expect(saved).toBe('"en"')
  79. })
  80. it('locale 应该返回正确的 Element Plus 语言包', () => {
  81. const store = useAppStore()
  82. expect(store.locale).toBeDefined()
  83. store.changeLanguage('en')
  84. expect(store.locale).toBeDefined()
  85. })
  86. })
  87. describe('组件尺寸设置', () => {
  88. it('setSize 应该设置组件尺寸', () => {
  89. const store = useAppStore()
  90. store.setSize('small')
  91. expect(store.size).toBe('small')
  92. store.setSize('large')
  93. expect(store.size).toBe('large')
  94. store.setSize('default')
  95. expect(store.size).toBe('default')
  96. })
  97. })
  98. describe('从 localStorage 恢复', () => {
  99. it('应该从 localStorage 恢复语言设置', () => {
  100. localStorage.setItem('language', '"en"')
  101. setActivePinia(createPinia())
  102. const store = useAppStore()
  103. expect(store.language).toBe('en')
  104. })
  105. it('localStorage 值无效时使用默认语言', () => {
  106. localStorage.setItem('language', 'invalid')
  107. setActivePinia(createPinia())
  108. const store = useAppStore()
  109. expect(store.language).toBe('zh-cn')
  110. })
  111. })
  112. })