components.spec.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import Vue from 'vue'
  2. import { UA } from 'core/util/env'
  3. import testObjectOption from '../../../helpers/test-object-option'
  4. describe('Options components', () => {
  5. testObjectOption('components')
  6. it('should accept plain object', () => {
  7. const vm = new Vue({
  8. template: '<test></test>',
  9. components: {
  10. test: {
  11. template: '<div>hi</div>'
  12. }
  13. }
  14. }).$mount()
  15. expect(vm.$el.tagName).toBe('DIV')
  16. expect(vm.$el.textContent).toBe('hi')
  17. })
  18. it('should accept extended constructor', () => {
  19. const Test = Vue.extend({
  20. template: '<div>hi</div>'
  21. })
  22. const vm = new Vue({
  23. template: '<test></test>',
  24. components: {
  25. test: Test
  26. }
  27. }).$mount()
  28. expect(vm.$el.tagName).toBe('DIV')
  29. expect(vm.$el.textContent).toBe('hi')
  30. })
  31. it('should accept camelCase', () => {
  32. const myComp = {
  33. template: '<div>hi</div>'
  34. }
  35. const vm = new Vue({
  36. template: '<my-comp></my-comp>',
  37. components: {
  38. myComp
  39. }
  40. }).$mount()
  41. expect(vm.$el.tagName).toBe('DIV')
  42. expect(vm.$el.textContent).toBe('hi')
  43. })
  44. it('should accept PascalCase', () => {
  45. const MyComp = {
  46. template: '<div>hi</div>'
  47. }
  48. const vm = new Vue({
  49. template: '<my-comp></my-comp>',
  50. components: {
  51. MyComp
  52. }
  53. }).$mount()
  54. expect(vm.$el.tagName).toBe('DIV')
  55. expect(vm.$el.textContent).toBe('hi')
  56. })
  57. it('should warn native HTML elements', () => {
  58. new Vue({
  59. components: {
  60. div: { template: '<div></div>' }
  61. }
  62. })
  63. expect(
  64. 'Do not use built-in or reserved HTML elements as component'
  65. ).toHaveBeenWarned()
  66. })
  67. it('should warn built-in elements', () => {
  68. new Vue({
  69. components: {
  70. component: { template: '<div></div>' }
  71. }
  72. })
  73. expect(
  74. 'Do not use built-in or reserved HTML elements as component'
  75. ).toHaveBeenWarned()
  76. })
  77. // the HTMLUnknownElement check doesn't work in Android 4.2
  78. // but since it doesn't support custom elements nor will any dev use it
  79. // as their primary debugging browser, it doesn't really matter.
  80. if (!(UA && /android 4\.2/.test(UA))) {
  81. it('warn non-existent', () => {
  82. new Vue({
  83. template: '<test></test>'
  84. }).$mount()
  85. expect('Unknown custom element: <test>').toHaveBeenWarned()
  86. })
  87. }
  88. })