#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;)