首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Cypress和Vue测试自定义事件

如何使用Cypress和Vue测试自定义事件
EN

Stack Overflow用户
提问于 2019-09-11 16:19:12
回答 1查看 1.6K关注 0票数 4

我需要假的行动,一个用户完成一个视频发射‘结束’事件。视频是包装在Vue VimeoPlayer组件https://github.com/dobromir-hristov/vue-vimeo-player中的Vimeo嵌入。

当视频自然结束时,“ends”事件将传递给应用程序中的包含组件。VimeoPlayer组件呈现一个id '#vimeo-player-2‘的容器,这就是我试图触发’and‘事件的原因,希望它会冒泡起来,并被捕捉到注册观看的视频。在我的柏树规范中:

代码语言:javascript
复制
cy.get('#vimeo-player-2').trigger('ended');

在我的Vue组件中:

代码语言:javascript
复制
<vimeo-player :video-id='block.content.id' @ended='updateProgress' ></vimeo-player>

这就是测试结果所显示的:

EN

回答 1

Stack Overflow用户

发布于 2019-09-13 02:57:49

您可以通过使用Vue的$emit()而不是Cypress‘.trigger()来做到这一点。

首先,您需要在window上引用播放器。

我还添加了一个数据变量“进度”来测试概念,您将有不同的测试标准。

Vue组件

代码语言:javascript
复制
<vimeo-player 
  :video-id='block.content.id' 
  @ended='updateProgress' 
  ref="player" />                // add a ref so we can get to the element
代码语言:javascript
复制
data() {
  return {
    ...
    progress: 'atStart'  // just for confirming the event fired
  }
},

mounted() {
  if (window.Cypress) {   // only when testing
    window.vuePlayer = this;
  }
},

methods: {
  ...
  updateProgress () {
    this.progress = 'atEnd'
  },
}

规范

代码语言:javascript
复制
cy.window().its('vuePlayer').then(myVueComponent => {

  const vueVimeoPlayerComponent = myVueComponent.$refs.player; 
  vueVimeoPlayerComponent.$emit('ended')

  // run test here, e.g
  console.log('testing', myVueComponent.progress)  // === 'atEnd'
})

注意,我关闭了autoplay,这样只允许规范发出的触发事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57893211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档