Как мне издеваться над MediaSource с помощью jest?

#javascript #unit-testing #mocking #jestjs #media-source

#javascript #модульное тестирование #издевательство #jestjs #media-source

Вопрос:

У меня есть видеокомпонент JavaScript (React), который зависит от MediaSource. В верхней части элемента управления у меня есть следующая строка кода (в глобальном масштабе, не внутри компонента).

 const mediaSource = 'MediaSource' in window ? new MediaSource() : null;
  

Когда я визуализирую свой компонент, если MediaSource равен null, я возвращаю ошибку. Это усложняет тестирование этого компонента.

У кого-нибудь есть идеи, как издеваться над MediaSource, чтобы я мог протестировать этот компонент?

Спасибо

Ответ №1:

Вы можете определить window свойства непосредственно перед тестированием по своему усмотрению.

https://jestjs.io/docs/ru/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom

 Object.defineProperty(window, 'MediaSource', {
  writable: true,
  value: jest.fn().mockImplementation((params) => ({
    // MediaSource implementation goes here
    addEventListener: jest.fn(),
  })),
});
  

Комментарии:

1. Если я добавлю это до того, как попытаюсь выполнить мелкий рендеринг своего компонента, я все равно получу, что MediaSource возвращает значение null

2. ОК. попробуйте сделать его ленивым следующим образом: const mediaSource = () => ('MediaSource' in window ? new MediaSource() : null;)