componentAsync.spec.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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.innerHTML).toBe(`<!---->`)
  30. resolve({ template: 'foo' })
  31. await timeout(0)
  32. expect(vm.$el.innerHTML).toBe(`foo`)
  33. expect(
  34. (deprecationData[DeprecationTypes.COMPONENT_ASYNC].message as Function)(
  35. comp
  36. )
  37. ).toHaveBeenWarned()
  38. })
  39. test('Promise', async () => {
  40. const comp = () => Promise.resolve({ template: 'foo' })
  41. const vm = new Vue({
  42. template: `<div><comp/></div>`,
  43. components: { comp }
  44. }).$mount()
  45. expect(vm.$el.innerHTML).toBe(`<!---->`)
  46. await timeout(0)
  47. expect(vm.$el.innerHTML).toBe(`foo`)
  48. expect(
  49. (deprecationData[DeprecationTypes.COMPONENT_ASYNC].message as Function)(
  50. comp
  51. )
  52. ).toHaveBeenWarned()
  53. })
  54. test('object syntax', async () => {
  55. const comp = () => ({
  56. component: Promise.resolve({ template: 'foo' })
  57. })
  58. const vm = new Vue({
  59. template: `<div><comp/></div>`,
  60. components: { comp }
  61. }).$mount()
  62. expect(vm.$el.innerHTML).toBe(`<!---->`)
  63. await timeout(0)
  64. expect(vm.$el.innerHTML).toBe(`foo`)
  65. expect(
  66. (deprecationData[DeprecationTypes.COMPONENT_ASYNC].message as Function)(
  67. comp
  68. )
  69. ).toHaveBeenWarned()
  70. })
  71. })