for_ref_spec.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. var Vue = require('../../../../../src/vue')
  2. var _ = Vue.util
  3. describe('v-for + v-ref', function () {
  4. var el
  5. beforeEach(function () {
  6. el = document.createElement('div')
  7. })
  8. it('normal', function (done) {
  9. var vm = new Vue({
  10. el: el,
  11. data: { items: [1, 2, 3, 4, 5] },
  12. template: '<test v-for="item in items" item="{{item}}" v-ref="test"></test>',
  13. components: {
  14. test: {
  15. props: ['item']
  16. }
  17. }
  18. })
  19. expect(vm.$.test).toBeTruthy()
  20. expect(Array.isArray(vm.$.test)).toBe(true)
  21. expect(vm.$.test[0].item).toBe(1)
  22. expect(vm.$.test[4].item).toBe(5)
  23. vm.items = []
  24. _.nextTick(function () {
  25. expect(vm.$.test.length).toBe(0)
  26. vm._directives[0].unbind()
  27. expect(vm.$.test).toBeNull()
  28. done()
  29. })
  30. })
  31. it('object', function (done) {
  32. var vm = new Vue({
  33. el: el,
  34. data: {
  35. items: {
  36. a: 1,
  37. b: 2
  38. }
  39. },
  40. template: '<test v-for="item in items" item="{{item}}" v-ref="test"></test>',
  41. components: {
  42. test: {
  43. props: ['item']
  44. }
  45. }
  46. })
  47. expect(vm.$.test).toBeTruthy()
  48. expect(_.isPlainObject(vm.$.test)).toBe(true)
  49. expect(vm.$.test.a.item).toBe(1)
  50. expect(vm.$.test.b.item).toBe(2)
  51. vm.items = { c: 3 }
  52. _.nextTick(function () {
  53. expect(Object.keys(vm.$.test).length).toBe(1)
  54. expect(vm.$.test.c.item).toBe(3)
  55. vm._directives[0].unbind()
  56. expect(vm.$.test).toBeNull()
  57. done()
  58. })
  59. })
  60. it('nested', function () {
  61. var vm = new Vue({
  62. el: el,
  63. template: '<c1 v-ref="c1"></c1>',
  64. components: {
  65. c1: {
  66. template: '<div v-for="n in 2" v-ref="c2"></div>'
  67. }
  68. }
  69. })
  70. expect(vm.$.c1 instanceof Vue).toBe(true)
  71. expect(vm.$.c2).toBeUndefined()
  72. expect(Array.isArray(vm.$.c1.$.c2)).toBe(true)
  73. expect(vm.$.c1.$.c2.length).toBe(2)
  74. })
  75. })