【问题标题】:Testing Watchers in Vue.js with Jasmine使用 Jasmine 在 Vue.js 中测试观察者
【发布时间】:2018-05-29 15:14:52
【问题描述】:

我想测试一个 VueJS 观察器方法,以检查它是否被调用。我的方法如下:

watch: {
   value: (newValue, oldValue) {
     if (newValue.Status === 'Completed') {
        ...do somethind
     }
  }
}

该方法在值更改时触发该方法,但在测试时未触发。

我的测试看起来像:

var propsData = {
   "value" : {
      "Status" : "Something"
    }
}
it('should call method', done => {
   const Constructor = Vue.extend(App);
   const spy = sinon.spy(App, 'value');
   const vm = new Constructor({ propsData: propsData }).$mount();
   vm.value.Status = 'Completed';
   Vue.nextTick(() => {
      expect(spy.called).to.be.true;
      done()
   })
})

我找到了以下示例,但似乎不适用于我的情况:

  1. Asserting Asynchronous Updates
  2. Forum

【问题讨论】:

    标签: javascript unit-testing vue.js jasmine


    【解决方案1】:

    您正在更改value.Status,而不是实际上value 参考。要在值更改时触发手表,您可以使用deep: true

    watch: {
       value: {
         handler: (newValue, oldValue) {
           this.checkValue() 
         },
         deep: true
       }
    },
    methods: {
      checkValue() {
      }
    }
    

    然后

    it('should call method', done => {
       const Constructor = Vue.extend(App);
       const vm = new Constructor({ propsData: propsData }).$mount();
       const spy = sinon.spy(vm, 'checkValue');
       vm.value.Status = 'New value';
       vm.$nextTick(() => {
          expect(spy.called).to.be.true;
          done()
       })
    })
    

    【讨论】:

    • 这是我的错。应该有value。我更新了。
    • 你在哪里声明someMethod
    • 我更新了我的问题。我没有someMethod,观察者名字应该和被观察的参数一样。
    • 在进行了您建议的所有更改后,我收到以下错误:Attempted to wrap undefined property checkValue as function
    • 修改后出现新错误:Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
    猜你喜欢
    • 2018-03-02
    • 2021-06-24
    • 2020-02-25
    • 1970-01-01
    • 2020-10-11
    • 2023-03-16
    • 2021-08-12
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多