Я хочу шпионить за методом, который возвращается функцией.
У меня есть этот компонент 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'
, Джест говорит мне, что это никогда не называлось.
Но если я шпионю за 'MediaPlayer'
с: jest.spyOn(dashjs, 'MediaPlayer')
, это работает (но это не то, что я хочу).
ПРИМЕЧАНИЕ: Это также не не работает, если я шпионю за 'create'
с: jest.spyOn(dashjs.MediaPlayer(), 'create')
. Так что это, вероятно, не связано с useEffect
.