用Jest&测试DashJS酶

时间:2018-03-29 13:24:24

标签: reactjs testing enzyme jest dash.js

我正在尝试为包含DashJS媒体播放器的React组件编写Jest测试。我正在使用Enzyme的mount方法来尝试测试组件,但似乎DashJS媒体播放器无法正确安装。

在我的componentDidMount方法中,我有以下代码:

    this.videoManager = dashjs.MediaPlayer().create();
    this.videoManager.initialize(this.videoPlayer, videoUrl, true);
    // Where this.videoPlayer is a reference to an HTML <video> element
    this.videoManager.preload();

最后一行(this.videoManager.preload();)产生以下错误:

  

在调用抛出此方法之前,必须首先使用有效源调用attachSource()

当我运行组件时它正常工作 - 这只是我遇到问题的测试。我无法在线找到任何相关问题/解决方案。

我正在使用每个相关软件包的以下版本:

  • react: "16.2.0"
  • dashjs: "2.6.7"
  • jest: "22.3.0"
  • enzyme: "3.3.0"
  • enzyme-adapter-react-16: "1.1.1"

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

该错误意味着videoUrl存在一些问题,导致initialize中传递的值无法设置。当preload检查是否已设置有效源时,将引发错误。

猜测,videoUrl是测试中的空字符串,但正常使用组件时长度是否为非零?

答案 1 :(得分:1)

再次看一下,问题可能是你(可能)使用JSDOM为你的测试提供DOM,而JSDOM在MediaSource中没有提供WebKitMediaSourcewindow 。这会导致dash.js无法初始化。 dash.js应抛出一个功能错误,可以使用player.on('error', () => {})来捕获。

作为旁注,您要向initialize提供视频对象,并将自动播放设置为true。做第一个会导致preload什么都不做,因为它只会将段加载到SourceBuffer中,这可能不是你想要的。