首页 > 解决方案 > 等待后未触发诗乃间谍 - 为什么?【Vue单元测试】

问题描述

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

我需要测试两个 VueX 操作是从创建特定组件的 created() 挂钩中分派的。第一个调度触发了它的诗乃间谍,但第二个不会。在第一个 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

据我了解,他在该链接上的解决方案不能在这里应用。

我会非常感谢任何关于我可以做些什么来解决这个问题的建议!

谢谢。

标签: javascriptvue.jssinon

解决方案


推荐阅读