我正在尝试为包含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"
任何帮助将不胜感激!
答案 0 :(得分:1)
该错误意味着videoUrl
存在一些问题,导致initialize
中传递的值无法设置。当preload
检查是否已设置有效源时,将引发错误。
猜测,videoUrl
是测试中的空字符串,但正常使用组件时长度是否为非零?
答案 1 :(得分:1)
再次看一下,问题可能是你(可能)使用JSDOM为你的测试提供DOM,而JSDOM在MediaSource
中没有提供WebKitMediaSource
或window
。这会导致dash.js无法初始化。 dash.js应抛出一个功能错误,可以使用player.on('error', () => {})
来捕获。
作为旁注,您要向initialize
提供视频对象,并将自动播放设置为true
。做第一个会导致preload
什么都不做,因为它只会将段加载到SourceBuffer中,这可能不是你想要的。