scope_spec.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. var Vue = require('../../../../src/vue')
  2. describe('Instance Scope', function () {
  3. describe('data proxy', function () {
  4. var data = {
  5. a: 0,
  6. b: 0
  7. }
  8. var vm = new Vue({
  9. data: data
  10. })
  11. it('initial', function () {
  12. expect(vm.a).toBe(data.a)
  13. expect(vm.b).toBe(data.b)
  14. })
  15. it('vm => data', function () {
  16. vm.a = 1
  17. expect(data.a).toBe(1)
  18. expect(vm.a).toBe(data.a)
  19. })
  20. it('data => vm', function () {
  21. data.b = 2
  22. expect(vm.b).toBe(2)
  23. expect(vm.b).toBe(data.b)
  24. })
  25. })
  26. describe('computed', function () {
  27. var Test = Vue.extend({
  28. computed: {
  29. c: function () {
  30. expect(this).toBe(vm)
  31. return this.a + this.b
  32. },
  33. d: {
  34. get: function () {
  35. expect(this).toBe(vm)
  36. return this.a + this.b
  37. },
  38. set: function (newVal) {
  39. expect(this).toBe(vm)
  40. var vals = newVal.split(' ')
  41. this.a = vals[0]
  42. this.b = vals[1]
  43. }
  44. }
  45. }
  46. })
  47. var vm = new Test({
  48. data: {
  49. a: 'a',
  50. b: 'b'
  51. }
  52. })
  53. it('get', function () {
  54. expect(vm.c).toBe('ab')
  55. expect(vm.d).toBe('ab')
  56. })
  57. it('set', function () {
  58. vm.c = 123 // should do nothing
  59. vm.d = 'c d'
  60. expect(vm.a).toBe('c')
  61. expect(vm.b).toBe('d')
  62. expect(vm.c).toBe('cd')
  63. expect(vm.d).toBe('cd')
  64. })
  65. it('inherit', function () {
  66. var child = vm.$addChild({
  67. inherit: true
  68. })
  69. expect(child.c).toBe('cd')
  70. child.d = 'e f'
  71. expect(vm.a).toBe('e')
  72. expect(vm.b).toBe('f')
  73. expect(vm.c).toBe('ef')
  74. expect(vm.d).toBe('ef')
  75. expect(child.a).toBe('e')
  76. expect(child.b).toBe('f')
  77. expect(child.c).toBe('ef')
  78. expect(child.d).toBe('ef')
  79. })
  80. it('same definition object bound to different instance', function () {
  81. vm = new Test({
  82. data: {
  83. a: 'A',
  84. b: 'B'
  85. }
  86. })
  87. expect(vm.c).toBe('AB')
  88. expect(vm.d).toBe('AB')
  89. vm.d = 'C D'
  90. expect(vm.a).toBe('C')
  91. expect(vm.b).toBe('D')
  92. expect(vm.c).toBe('CD')
  93. expect(vm.d).toBe('CD')
  94. })
  95. })
  96. describe('methods', function () {
  97. it('should work and have correct context', function () {
  98. var vm = new Vue({
  99. data: {
  100. a: 1
  101. },
  102. methods: {
  103. test: function () {
  104. expect(this instanceof Vue).toBe(true)
  105. return this.a
  106. }
  107. }
  108. })
  109. expect(vm.test()).toBe(1)
  110. var child = vm.$addChild({
  111. inherit: true
  112. })
  113. expect(child.test()).toBe(1)
  114. })
  115. })
  116. describe('meta', function () {
  117. var vm = new Vue({
  118. _meta: {
  119. $index: 0,
  120. $value: 'test'
  121. }
  122. })
  123. it('should define metas only on vm', function () {
  124. expect(vm.$index).toBe(0)
  125. expect(vm.$value).toBe('test')
  126. expect('$index' in vm.$data).toBe(false)
  127. expect('$value' in vm.$data).toBe(false)
  128. })
  129. })
  130. })