html.spec.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. }).then(() => {
  38. expect(vm.$el.innerHTML).toBe('[]')
  39. vm.a = {}
  40. }).then(() => {
  41. expect(vm.$el.innerHTML).toBe('{}')
  42. vm.a = 123
  43. }).then(() => {
  44. expect(vm.$el.innerHTML).toBe('123')
  45. vm.a = 0
  46. }).then(() => {
  47. expect(vm.$el.innerHTML).toBe('0')
  48. vm.a = ' '
  49. }).then(() => {
  50. expect(vm.$el.innerHTML).toBe(' ')
  51. vm.a = ' '
  52. }).then(() => {
  53. expect(vm.$el.innerHTML).toBe(' ')
  54. vm.a = null
  55. }).then(() => {
  56. expect(vm.$el.innerHTML).toBe('')
  57. vm.a = undefined
  58. }).then(() => {
  59. expect(vm.$el.innerHTML).toBe('')
  60. }).then(done)
  61. })
  62. })