在我的组件中,我有如下代码:
this.videoRef.current.pause();
videoRef
是<video ref={this.videoRef} autoPlay muted > ...
的地方
在测试中达到pause
时,我得到一个错误:
Error: Not implemented: HTMLMediaElement.prototype.pause
如何模拟暂停功能?
const wrapper = mount(<ComponentWithVideoTag />);
const el = wrapper.find('video').props();
Object.defineProperty(el, 'paused', {
writable: true,
value: jest.fn(),
});
不为我工作。
答案 0 :(得分:1)
我不会担心尝试模拟特定元素上的道具,而只是模拟正在调用的高级API。您可以使用spyOn实现此目的,只需确保稍后在存根上调用mockRestore(以防万一,您需要在文件的其他位置使用它)。
const pauseStub = jest
.spyOn(window.HTMLMediaElement.prototype, 'pause')
.mockImplementation(() => {})
const wrapper = mount(<ComponentWithVideoTag />);
// trigger the code that you would expect to call the pause function
expect(pauseStub).toHaveBeenCalled()
pauseStub.mockRestore()