use-locale.test.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { computed, defineComponent, nextTick } from 'vue'
  2. import { mount } from '@vue/test-utils'
  3. import { afterEach, beforeEach, describe, expect, it } from 'vitest'
  4. import Chinese from '@element-plus/locale/lang/zh-cn'
  5. import English from '@element-plus/locale/lang/en'
  6. import { provideGlobalConfig } from '@element-plus/components/config-provider'
  7. import { buildTranslator, useLocale } from '../use-locale'
  8. import type { Language } from '@element-plus/locale'
  9. import type { ComponentPublicInstance, PropType } from 'vue'
  10. import type { VueWrapper } from '@vue/test-utils'
  11. const TestComp = defineComponent({
  12. setup() {
  13. const { t } = useLocale()
  14. return () => (
  15. <div class="locale-manifest">{t('el.popconfirm.confirmButtonText')}</div>
  16. )
  17. },
  18. })
  19. describe('use-locale', () => {
  20. let wrapper: VueWrapper<ComponentPublicInstance>
  21. beforeEach(() => {
  22. wrapper = mount(
  23. defineComponent({
  24. props: {
  25. locale: {
  26. type: Object as PropType<Language>,
  27. default: Chinese,
  28. },
  29. },
  30. setup(props) {
  31. provideGlobalConfig(computed(() => ({ locale: props.locale })))
  32. return () => <TestComp />
  33. },
  34. })
  35. )
  36. })
  37. afterEach(() => {
  38. wrapper.unmount()
  39. })
  40. it('should provide locale correctly', async () => {
  41. await nextTick()
  42. expect(wrapper.find('.locale-manifest').text()).toBe(
  43. Chinese.el.popconfirm.confirmButtonText
  44. )
  45. })
  46. it('should update the text reactively', async () => {
  47. await nextTick()
  48. expect(wrapper.find('.locale-manifest').text()).toBe(
  49. Chinese.el.popconfirm.confirmButtonText
  50. )
  51. await wrapper.setProps({
  52. locale: English,
  53. })
  54. expect(wrapper.find('.locale-manifest').text()).toBe(
  55. English.el.popconfirm.confirmButtonText
  56. )
  57. })
  58. it('return key name if not defined', () => {
  59. const t = buildTranslator(English)
  60. expect(t('el.popconfirm.someThing')).toBe('el.popconfirm.someThing')
  61. })
  62. describe('overrides', () => {
  63. it('should be override correctly', () => {
  64. const override = computed(() => English)
  65. const wrapper = mount(
  66. defineComponent({
  67. setup(_, { expose }) {
  68. const { locale } = useLocale(override)
  69. expose({
  70. locale,
  71. })
  72. },
  73. template: '<div></div>',
  74. }),
  75. {
  76. global: {
  77. provide: {
  78. locale: Chinese,
  79. },
  80. },
  81. }
  82. )
  83. expect(wrapper.vm.locale).toBe(override.value)
  84. })
  85. })
  86. })