SkateJS — это библиотека для создания веб-компонентов на основе современных стандартов, таких как Custom Elements и Shadow DOM. При разработке компонентов часто возникает необходимость изолированного тестирования, особенно когда компонент взаимодействует с внешними зависимостями, такими как API, хранилища состояния или сторонние сервисы. Мокирование позволяет заменить реальные зависимости на имитации, контролировать их поведение и проверять реакции компонента.
Мокирование служит для:
Мокирование через свойства компонента SkateJS позволяет использовать свойства для передачи зависимостей. Вместо прямого импорта сервиса его можно передавать в компонент через пропсы, а в тестах подставлять моки.
import { define, props, Component } from 'skatejs';
class UserProfile extends Component {
static props = {
userService: props.object
};
connectedCallback() {
super.connectedCallback();
this.userService.fetchUser().then(user => {
this.render(user);
});
}
render(user) {
this.innerHTML = `<p>${user.name}</p>`;
}
}
define('user-profile', UserProfile);
В тестах:
const mockUserService = {
fetchUser: () => Promise.resolve({ name: 'Иван' })
};
const element = document.createElement('user-profile');
element.userService = mockUserService;
document.body.appendChild(element);
Такой подход упрощает замену сервисов на моки и делает компонент полностью тестируемым.
Мокирование через ES-модули Если зависимость
импортируется напрямую, можно использовать инструменты вроде
jest.mock или аналогичные возможности в других фреймворках
тестирования. Это позволяет заменить конкретный модуль на тестовый
вариант без изменения компонента.
import * as api from './api';
jest.mock('./api', () => ({
fetchUser: jest.fn(() => Promise.resolve({ name: 'Мария' }))
}));
import { UserProfile } from './user-profile';
test('рендерит имя пользователя', async () => {
const element = document.createElement('user-profile');
document.body.appendChild(element);
await new Promise(setImmediate);
expect(element.innerHTML).toContain('Мария');
});Мокирование глобальных объектов и API браузера
Иногда компонент зависит от fetch,
localStorage, window или других глобальных
объектов. Их можно временно заменять в тестах:
const originalFetch = window.fetch;
window.fetch = jest.fn(() =>
Promise.resolve({ json: () => Promise.resolve({ data: 123 }) })
);
// ...тестирование компонента
window.fetch = originalFetch; // восстановление после теста
Это полезно для проверки поведения компонента при разных ответах сервера без реальных запросов.
element.shadowRoot.querySelector.Мокирование зависимостей является ключевым инструментом при тестировании SkateJS-компонентов, позволяя создавать изолированные, надежные и воспроизводимые тесты без сложной инфраструктуры.