2017-09-06 17 views
0

私は反応アプリケーションでビデオ反応を使用しています。私は、ビデオ反応コンポーネントからrefメソッドを呼び出すコンポーネントをテストする必要があります。 酵素を使いたいので、コンポーネントをマウントして、ComponentDidMountでrefメソッドを呼び出したことを確認できます。反応中のテストのためにrefでコールバックをモックするにはどうすればよいですか?

基本的に、refs.player.seekが以下のように呼び出されることをテストするにはどうすればよいですか?私は方法をレンダリング打つ自分のREFコールバックを模擬できるようvideo-react以来

componentDidMount() { 
    this.refs.player.seek(this.props.currentTime); 
    this.refs.player.subscribeToStateChange(this.handlePlayerStateChange); 
} 
+1

。代わりに、コールバックパターンを使用します。詳細情報[here](https://stackoverflow.com/questions/43873511/deprecation-warning-using-this-refs/43873736#43873736)[こちら](https://facebook.github.io/react/docs) /refs-and-thedom.html#legacy-api-string-refs)。 – Chris

+0

@Chrisそれを指摘していただきありがとうございます、私は自分のコードを修正し、私の例を更新します! – Sally

答えて

0

は、プレイを呼び出し、一時停止し、私の知識を求めるように、引用文献を必要とし、私はこのパターンを使用して終了しました。

https://medium.com/@planttheidea/never-render-in-react-testing-again-fc4bcfc2f71d

例コンポーネントコード:

export const createComponentWillReceiveProps = instance => ({seekTime, isPlaying, onSeekComplete}) => { 
    const {paused} = instance.playerRef.getState().player; 

    if (seekTime) { 
    instance.playerRef.seek(seekTime); 
    onSeekComplete(); 
    } 
    if (isPlaying && paused) { 
    instance.playerRef.play(); 
    } 
    if (!isPlaying && !paused) { 
    instance.playerRef.pause(); 
    } 
}; 

...

componentWillReceiveProps = createComponentWillReceiveProps(this) 

...

<VideoReactPlayer ref={el => this.playerRef = el} preload='auto' src={source}> 

...

とテストこのように見えた:それはリアクトの最新バージョンで廃止されてあなたは `this.refs`を使用しないでください

it('calls playerRef.play when isPlaying prop is true & paused is true',() => { 
    const instance = {playerRef: {play: jest.fn(), getState:() => ({player: {paused: true}})}}; 
    const componentWillReceiveProps = createComponentWillReceiveProps(instance); 
    componentWillReceiveProps({isPlaying: true}); 
    expect(instance.playerRef.play).toBeCalled(); 
    }); 
関連する問題