浏览代码

test case for shared getter evaluation

Evan You 9 年之前
父节点
当前提交
b557526c93
共有 1 个文件被更改,包括 62 次插入0 次删除
  1. 62 0
      test/unit/test.js

+ 62 - 0
test/unit/test.js

@@ -324,4 +324,66 @@ describe('Vuex', () => {
     expect(vm.a).to.equal(6)
     expect(store.state.a).to.equal(6)
   })
+
+  it('shared getters should evaluate only once', function (done) {
+    const store = new Vuex.Store({
+      state: {
+        a: 1
+      },
+      mutations: {
+        [TEST] (state) {
+          state.a++
+        }
+      }
+    })
+
+    let getterCalls = 0
+    let watcherCalls = 0
+    const getter = state => {
+      getterCalls++
+      return state.a
+    }
+
+    const vm1 = new Vue({
+      store,
+      vuex: {
+        getters: {
+          a: getter
+        }
+      },
+      watch: {
+        a: () => {
+          watcherCalls++
+        }
+      }
+    })
+
+    const vm2 = new Vue({
+      store,
+      vuex: {
+        getters: {
+          a: getter
+        }
+      },
+      watch: {
+        a: () => {
+          watcherCalls++
+        }
+      }
+    })
+
+    expect(vm1.a).to.equal(1)
+    expect(vm2.a).to.equal(1)
+    expect(getterCalls).to.equal(1)
+    expect(watcherCalls).to.equal(0)
+
+    store.dispatch('TEST')
+    Vue.nextTick(() => {
+      expect(vm1.a).to.equal(2)
+      expect(vm2.a).to.equal(2)
+      expect(getterCalls).to.equal(2)
+      expect(watcherCalls).to.equal(2)
+      done()
+    })
+  })
 })