等待后没有触发锡诺间谍-为什么? [Vue单元测试]

时间:2019-04-07 10:32:03

标签: javascript vue.js sinon

我一般都不是Vue和Vue单元测试的新手,所以请多多包涵。 :)

我需要测试是否从特定组件创建的created()钩子中派出了两个VueX动作。第一次调度会触发其Sinon间谍,但第二次则不会。在第一个await语句之后,没有间谍将起作用。

可能很重要的一点是,代码本身可以正常运行,并且可以完成预期的工作。只是单元测试失败了。

这是示例代码:

async created() {
  await this.$store.dispatch(GET_A)
  await this.$store.dispatch(GET_B)

  // Do a bunch of other things after.
}

这是单元测试(使用Chai和Mocha):

// Bunch of other things happen here, like setting up localVue, etc.

describe('TestPage.vue', () => {
  let actions
  let getters
  let store
  let router

  beforeEach(() => {
    actions = {
      GET_A: sinon.stub(),
      GET_B: sinon.stub(),
    }

    store = new Vuex.Store({
      actions,
      getters
    })

    router = new VueRouter()
  })

  it('created() should trigger the action GET_B.', () => {
    const wrapper = shallowMount(TestPage, {
      store,
      localVue,
      router,
      attachToDocument: true
    })

    expect(actions.GET_B.called).to.be.equal(true)
  })
})

如果我在created()挂钩中交换两个分派方法的顺序,则测试将通过,因为GET_B首先。但是,然后GET_A的单元测试将失败。

我当时想这可能是因为存根的动作没有返回承诺,导致测试暂停等待直到超时。

我已经做了很多尝试来寻找其他人遇到的类似问题,这是我能得到的最接近的问题:https://github.com/sinonjs/sinon/issues/1735

从我的理解来看,他的解决方案无法在此处应用。

对于能解决此问题的任何建议,我将不胜感激!

谢谢。

0 个答案:

没有答案