代码之家  ›  专栏  ›  技术社区  ›  Maksim Nesterenko

如何在测试中手动更新vue计算属性

  •  0
  • Maksim Nesterenko  · 技术社区  · 5 年前

    我有一个组件 Foo 带Vuex绑定 mockedVuexBinding (本质上是一个计算道具)。

    我想让测试保持简单,不想嘲笑整个商店。我在测试中用计算存根替换了所有vuex绑定,如下所示:

    const wrapper = shallowMount(Foo, {
      computed: {
        mockedVuexBinding: () => 'foo'
      }
    }
    

    但后来发现我需要测试 ,这取决于计算属性的变化。所以我想用一个值更新我的计算值,并测试组件对它的反应(例如,发出新值)。

    没有这样的方法 setComputed 以此类推 wrapper.setProps wrapper.setData ,那我该怎么做呢?如何用不同的值替换模拟计算值?

    0 回复  |  直到 5 年前
        1
  •  2
  •   Alonad    4 年前

    通常,我们可以模拟一切,为了模拟测试期间计算值发生变化时的行为,我们可以执行以下操作:

    const wrapper = mount(Component, {
      data() {
        return {
          computedSwitcher: false
        };
      },
      computed: {
        someComputed: {
          get() {
            return this.computedSwitcher;
          },
          set(val) {
            this.computedSwitcher = val;
          }
        }
      }
    });
    

    然后,当我们需要改变测试期间的计算值时,我们会:

    wrapper.vm.someComputed = true;
    

    换句话说,我们将computed链接到一个模拟的computed switcher,它并不存在于真实组件中,只是为了测试模拟计算行为。

    有一点要记住,如果计算值触发了重新渲染,并且我们要检查与此相关的内容,在更改computed之后,还调用

    await wrapper.vm.$nextTick();