我想监视函数返回的方法。
我有这个React组件:
import React, { useRef, useEffect } from 'react';
import dashjs from 'dashjs';
// ... `Props` interface and PropTypes
export const Player: React.FC<Props> = ({ mpdUri }) => {
const playerRef = useRef(dashjs.MediaPlayer().create());
const videoRef = useRef<HTMLVideoElement>(null);
useEffect(() => {
const video = videoRef.current;
if (video) {
playerRef.current.initialize(video, mpdUri, false);
}
}, [mpdUri]);
return <video ref={videoRef} controls={false} />
};
请记住,我正在使用dashjs.MediaPlayer().create()
创建一个播放器,并且试图测试该播放器是否由player.current.initialize(video, mpdUri, false)
初始化。
这是我目前的考试:
import dashjs from 'dashjs';
import React from 'react';
import { mount } from 'enzyme';
import { Player } from '.';
it('it initialize the player with the right data', () => {
const spy = jest.spyOn(dashjs.MediaPlayer().create(), 'initialize');
mount(<Player mpdUri="fakeUri.mpd" />);
expect(spy).toHaveBeenCalledTimes(1);
// ... expect arguments and maybe more
});
当我尝试监视'initialize'
时,Jest告诉我它从未被调用过。
但是,如果我用'MediaPlayer'
监视jest.spyOn(dashjs, 'MediaPlayer')
,它确实可以工作(但这不是我想要的)。
注意:如果我使用'create'
监视jest.spyOn(dashjs.MediaPlayer(), 'create')
,它也将不起作用。因此,这可能与useEffect
无关。