监视函数返回的方法

时间:2020-01-21 16:07:42

标签: reactjs typescript jestjs

我想监视函数返回的方法。

我有这个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无关。

0 个答案:

没有答案
相关问题