html.spec.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import Vue from 'vue'
  2. describe('Directive v-html', () => {
  3. it('should render html', () => {
  4. const vm = new Vue({
  5. template: '<div v-html="a"></div>',
  6. data: { a: 'hello' }
  7. }).$mount()
  8. expect(vm.$el.innerHTML).toBe('hello')
  9. })
  10. it('should encode html entities', () => {
  11. const vm = new Vue({
  12. template: '<div v-html="a"></div>',
  13. data: { a: '<span>&lt;</span>' }
  14. }).$mount()
  15. expect(vm.$el.innerHTML).toBe('<span>&lt;</span>')
  16. })
  17. it('should work inline', () => {
  18. const vm = new Vue({
  19. template: `<div v-html="'<span>&lt;</span>'"></div>`
  20. }).$mount()
  21. expect(vm.$el.innerHTML).toBe('<span>&lt;</span>')
  22. })
  23. it('should work inline in DOM', () => {
  24. const el = document.createElement('div')
  25. el.innerHTML = `<div v-html="'<span>&lt;</span>'"></div>`
  26. const vm = new Vue({ el })
  27. expect(vm.$el.children[0].innerHTML).toBe('<span>&lt;</span>')
  28. })
  29. it('should support all value types', done => {
  30. const vm = new Vue({
  31. template: '<div v-html="a"></div>',
  32. data: { a: false }
  33. }).$mount()
  34. waitForUpdate(() => {
  35. expect(vm.$el.innerHTML).toBe('false')
  36. vm.a = []
  37. })
  38. .then(() => {
  39. expect(vm.$el.innerHTML).toBe('[]')
  40. vm.a = {}
  41. })
  42. .then(() => {
  43. expect(vm.$el.innerHTML).toBe('{}')
  44. vm.a = {
  45. toString() {
  46. return 'foo'
  47. }
  48. }
  49. })
  50. .then(() => {
  51. expect(vm.$el.innerHTML).toBe('foo')
  52. vm.a = {
  53. toJSON() {
  54. return { foo: 'bar' }
  55. }
  56. }
  57. })
  58. .then(() => {
  59. expect(vm.$el.innerHTML).toBe('{\n "foo": "bar"\n}')
  60. vm.a = 123
  61. })
  62. .then(() => {
  63. expect(vm.$el.innerHTML).toBe('123')
  64. vm.a = 0
  65. })
  66. .then(() => {
  67. expect(vm.$el.innerHTML).toBe('0')
  68. vm.a = ' '
  69. })
  70. .then(() => {
  71. expect(vm.$el.innerHTML).toBe(' ')
  72. vm.a = ' '
  73. })
  74. .then(() => {
  75. expect(vm.$el.innerHTML).toBe(' ')
  76. vm.a = null
  77. })
  78. .then(() => {
  79. expect(vm.$el.innerHTML).toBe('')
  80. vm.a = undefined
  81. })
  82. .then(() => {
  83. expect(vm.$el.innerHTML).toBe('')
  84. })
  85. .then(done)
  86. })
  87. })