Шпион метод, который возвращается функцией - PullRequest
0 голосов
/ 21 января 2020

Я хочу шпионить за методом, который возвращается функцией.

У меня есть этот компонент 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...