componentAsync.spec.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import Vue from '@vue/compat'
  2. import {
  3. DeprecationTypes,
  4. deprecationData,
  5. toggleDeprecationWarning,
  6. } from '../../runtime-core/src/compat/compatConfig'
  7. beforeEach(() => {
  8. toggleDeprecationWarning(true)
  9. Vue.configureCompat({
  10. MODE: 2,
  11. GLOBAL_MOUNT: 'suppress-warning',
  12. })
  13. })
  14. afterEach(() => {
  15. toggleDeprecationWarning(false)
  16. Vue.configureCompat({ MODE: 3 })
  17. })
  18. const timeout = (n: number) => new Promise(r => setTimeout(r, n))
  19. describe('COMPONENT_ASYNC', () => {
  20. test('resolve/reject', async () => {
  21. let resolve: any
  22. const comp = (r: any) => {
  23. resolve = r
  24. }
  25. const vm = new Vue({
  26. template: `<div><comp/></div>`,
  27. components: { comp },
  28. }).$mount()
  29. expect(vm.$el).toBeInstanceOf(HTMLDivElement)
  30. expect(vm.$el.innerHTML).toBe(`<!---->`)
  31. resolve({ template: 'foo' })
  32. await timeout(0)
  33. expect(vm.$el.innerHTML).toBe(`foo`)
  34. expect(
  35. (deprecationData[DeprecationTypes.COMPONENT_ASYNC].message as Function)(
  36. comp,
  37. ),
  38. ).toHaveBeenWarned()
  39. })
  40. test('Promise', async () => {
  41. const comp = () => Promise.resolve({ template: 'foo' })
  42. const vm = new Vue({
  43. template: `<div><comp/></div>`,
  44. components: { comp },
  45. }).$mount()
  46. expect(vm.$el).toBeInstanceOf(HTMLDivElement)
  47. expect(vm.$el.innerHTML).toBe(`<!---->`)
  48. await timeout(0)
  49. expect(vm.$el.innerHTML).toBe(`foo`)
  50. expect(
  51. (deprecationData[DeprecationTypes.COMPONENT_ASYNC].message as Function)(
  52. comp,
  53. ),
  54. ).toHaveBeenWarned()
  55. })
  56. test('object syntax', async () => {
  57. const comp = () => ({
  58. component: Promise.resolve({ template: 'foo' }),
  59. })
  60. const vm = new Vue({
  61. template: `<div><comp/></div>`,
  62. components: { comp },
  63. }).$mount()
  64. expect(vm.$el).toBeInstanceOf(HTMLDivElement)
  65. expect(vm.$el.innerHTML).toBe(`<!---->`)
  66. await timeout(0)
  67. expect(vm.$el.innerHTML).toBe(`foo`)
  68. expect(
  69. (deprecationData[DeprecationTypes.COMPONENT_ASYNC].message as Function)(
  70. comp,
  71. ),
  72. ).toHaveBeenWarned()
  73. })
  74. })