forked from vuejs/vue-test-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathset-watchers-to-sync.js
42 lines (35 loc) · 1.03 KB
/
set-watchers-to-sync.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { VUE_VERSION } from './consts'
function setDepsSync (dep) {
dep.subs.forEach(setWatcherSync)
}
function setWatcherSync (watcher) {
if (watcher.sync === true) {
return
}
watcher.sync = true
watcher.deps.forEach(setDepsSync)
}
export function setWatchersToSync (vm) {
if (vm._watchers) {
vm._watchers.forEach(setWatcherSync)
}
if (vm._computedWatchers) {
Object.keys(vm._computedWatchers).forEach((computedWatcher) => {
setWatcherSync(vm._computedWatchers[computedWatcher])
})
}
setWatcherSync(vm._watcher)
vm.$children.forEach(setWatchersToSync)
// preventing double registration
if (!vm.$_vueTestUtils_updateInSetWatcherSync) {
vm.$_vueTestUtils_updateInSetWatcherSync = vm._update
vm._update = function (vnode, hydrating) {
this.$_vueTestUtils_updateInSetWatcherSync(vnode, hydrating)
if (VUE_VERSION >= 2.1 && this._isMounted && this.$options.updated) {
this.$options.updated.forEach((handler) => {
handler.call(this)
})
}
}
}
}