我一般都不是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
从我的理解来看,他的解决方案无法在此处应用。
对于能解决此问题的任何建议,我将不胜感激!
谢谢。