2
0

components.spec.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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('Do not use built-in or reserved HTML elements as component').toHaveBeenWarned()
  64. })
  65. it('should warn built-in elements', () => {
  66. new Vue({
  67. components: {
  68. component: { template: '<div></div>' }
  69. }
  70. })
  71. expect('Do not use built-in or reserved HTML elements as component').toHaveBeenWarned()
  72. })
  73. // the HTMLUnknownElement check doesn't work in Android 4.2
  74. // but since it doesn't support custom elements nor will any dev use it
  75. // as their primary debugging browser, it doesn't really matter.
  76. if (!(UA && /android 4\.2/.test(UA))) {
  77. it('warn non-existent', () => {
  78. new Vue({
  79. template: '<test></test>'
  80. }).$mount()
  81. expect('Unknown custom element: <test>').toHaveBeenWarned()
  82. })
  83. }
  84. })