methods-watch.spec.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import Vue from 'vue'
  2. describe('Instance methods watch', () => {
  3. let vm, spy
  4. beforeEach(() => {
  5. vm = new Vue({
  6. data: {
  7. a: {
  8. b: 1
  9. }
  10. }
  11. })
  12. spy = jasmine.createSpy('watch')
  13. })
  14. it('basic usage', done => {
  15. vm.$watch('a.b', spy)
  16. vm.a.b = 2
  17. waitForUpdate(() => {
  18. expect(spy.calls.count()).toBe(1)
  19. expect(spy).toHaveBeenCalledWith(2, 1)
  20. vm.a = { b: 3 }
  21. }).then(() => {
  22. expect(spy.calls.count()).toBe(2)
  23. expect(spy).toHaveBeenCalledWith(3, 2)
  24. }).then(done)
  25. })
  26. it('immediate', () => {
  27. vm.$watch('a.b', spy, { immediate: true })
  28. expect(spy.calls.count()).toBe(1)
  29. expect(spy).toHaveBeenCalledWith(1)
  30. })
  31. it('unwatch', done => {
  32. const unwatch = vm.$watch('a.b', spy)
  33. unwatch()
  34. vm.a.b = 2
  35. waitForUpdate(() => {
  36. expect(spy.calls.count()).toBe(0)
  37. }).then(done)
  38. })
  39. it('function watch', done => {
  40. vm.$watch(function () {
  41. return this.a.b
  42. }, spy)
  43. vm.a.b = 2
  44. waitForUpdate(() => {
  45. expect(spy).toHaveBeenCalledWith(2, 1)
  46. }).then(done)
  47. })
  48. it('deep watch', done => {
  49. var oldA = vm.a
  50. vm.$watch('a', spy, { deep: true })
  51. vm.a.b = 2
  52. waitForUpdate(() => {
  53. expect(spy).toHaveBeenCalledWith(oldA, oldA)
  54. vm.a = { b: 3 }
  55. }).then(() => {
  56. expect(spy).toHaveBeenCalledWith(vm.a, oldA)
  57. }).then(done)
  58. })
  59. it('warn expresssion', () => {
  60. vm.$watch('a + b', spy)
  61. expect('Watcher only accepts simple dot-delimited paths').toHaveBeenWarned()
  62. })
  63. })