如何在 Vue 笑话测试中等待引导模式动画完成

Posted

技术标签:

【中文标题】如何在 Vue 笑话测试中等待引导模式动画完成【英文标题】:How to wait for bootstrap modal animation to finish in Vue jest test 【发布时间】:2019-09-18 23:11:44 【问题描述】:

是否可以在 Vue jest 测试中等待模态动画完成?我的问题是,当我单击按钮(button.add_modal)时,div.my-modal 应该得到一个类“显示”,但在触发我的按钮后,似乎该类未附加在我的 html 中(在开玩笑测试中) ),在开发工具中工作正常。

    wrapper.find('button.add_modal').trigger('click');
    //This should return true, but I'm getting false.
    expect(wrapper.contains('div#my-modal.show')).toBe(true);

【问题讨论】:

【参考方案1】:

我们在测试包含BootstrapVue modal 的组件时遇到了类似的问题。我通过查看BV modal unit tests 自己发现了一些有用的东西。在那里,您会看到以下内容自始至终重复:

// take action to open modal and then
await waitNT(wrapper.vm)
await waitRAF()
await waitNT(wrapper.vm)
await waitRAF()

...waitNTwaitRF 在 tests/utils.js 中定义:

export const waitNT = ctx => new Promise(resolve => ctx.$nextTick(resolve))
export const waitRAF = () => new Promise(resolve => requestAnimationFrame(resolve))

这允许 DOM 更新完成并且模态在您的测试中“出现”。你可能需要摆弄你打电话给他们的次数。在触发模态打开后,您会在 BV unit tests 的任何地方看到它们重复 1-3 次。

另一个有用的项目是在你的包装器安装中存根转换,例如:

wrapper.mount(MyModalComponent, 
  stubs: 
    transition: false
  

这确保了转换同步发生而不是异步发生,如detailed in the docs here。

【讨论】:

以上是关于如何在 Vue 笑话测试中等待引导模式动画完成的主要内容,如果未能解决你的问题,请参考以下文章

笑话:等待异步测试完成后再运行下一个测试

如何在异步笑话 test.each 案例中传入 done() 参数

如何在Unity C#中等待动画完成[重复]

如何使用 jest 在单元测试中测试引导 vue 组件的存在?

让笑话/酶测试等待上下文

在执行代码之前等待 Swift 动画完成