diff --git a/src/hooks/media-controls.js b/src/hooks/media-controls.js index 5385a6e..bfac719 100644 --- a/src/hooks/media-controls.js +++ b/src/hooks/media-controls.js @@ -51,8 +51,6 @@ export function useMediaControls(element) { } useEffect(() => { - if (!element || !element.current) return - const isPaused = () => element.current.paused || element.current.ended setCurrentTime(element.current.currentTime) diff --git a/test/unit/hooks/media-controls.unit.test.js b/test/unit/hooks/media-controls.unit.test.js new file mode 100644 index 0000000..017da61 --- /dev/null +++ b/test/unit/hooks/media-controls.unit.test.js @@ -0,0 +1,391 @@ +import React, { useRef } from 'react' +import { cleanup, fireEvent, render } from 'react-testing-library' +import { act } from 'react-dom/test-utils' + +import { useMediaControls } from '../../../src' + +// ref +let mediaElementRef + +// hook state +let currentTime, + mute, + muted, + unmute, + pause, + paused, + play, + restart, + seek, + setVolume, + stop, + volume + +// spys +let mediaElementPlaySpy, mediaElementPauseSpy + +// getters +let pausedGetter + +beforeEach(() => { + act(() => { + testMediaControlsHook( + () => + ({ + currentTime, + mute, + muted, + unmute, + pause, + paused, + play, + restart, + seek, + setVolume, + stop, + volume + } = useMediaControls(mediaElementRef)) + ) + }) + + mediaElementPlaySpy = jest + .spyOn(mediaElementRef.current, 'play') + .mockImplementation(() => {}) + mediaElementPauseSpy = jest + .spyOn(mediaElementRef.current, 'pause') + .mockImplementation(() => {}) + + pausedGetter = jest.spyOn(mediaElementRef.current, 'paused', 'get') +}) + +afterEach(cleanup) + +function TestMediaControlsHook({ callback }) { + mediaElementRef = useRef(null) + callback() + return ( +