Gridstack.js — это библиотека для динамической организации сетки элементов с возможностью перетаскивания, изменения размера и управления расположением виджетов. В процессе разработки сложных интерфейсов часто возникает необходимость создавать моки (mock) и заглушки (stub) для тестирования поведения сетки и взаимодействия с внешними источниками данных.
Моки — это объекты, имитирующие реальные компоненты или данные. Они позволяют проверять работу сетки в контролируемой среде без подключения к реальным API или базам данных. Заглушки — это более простая форма мока, используемая для возврата фиксированных значений вместо выполнения настоящей логики.
Для имитации виджетов сетки используется объектная структура, соответствующая API Gridstack:
const mockWidgets = [
{ id: 'widget1', x: 0, y: 0, width: 2, height: 2, content: 'Виджет 1' },
{ id: 'widget2', x: 2, y: 0, width: 3, height: 2, content: 'Виджет 2' },
{ id: 'widget3', x: 0, y: 2, width: 5, height: 3, content: 'Виджет 3' }
];
Каждый объект содержит параметры:
x, y — координаты в сетке,width, height — размеры блока в
ячейках,id — уникальный идентификатор,content — содержимое виджета, которое может быть HTML
или текстом.Эти моки можно передавать в Gridstack при инициализации:
const grid = GridStack.init({
float: true,
cellHeight: 100,
disableOneColumnMode: true
});
mockWidgets.forEach(widget => {
grid.addWidget(`<div id="${widget.id}">${widget.content}</div>`, {
x: widget.x,
y: widget.y,
w: widget.width,
h: widget.height
});
});
Такой подход позволяет тестировать поведение сетки, перетаскивание, изменение размеров и визуальные коллизии без подключения к реальному серверу.
Gridstack.js предоставляет множество методов для работы с виджетами,
таких как move(), removeWidget(),
addWidget(). Для тестирования можно создавать заглушки,
которые заменяют эти методы фиктивной логикой:
const gridStub = {
addWidget: (html, options) => {
console.log('Добавлен виджет:', html, options);
return { html, options };
},
removeWidget: (element) => {
console.log('Удален виджет:', element);
},
move: (el, x, y) => {
console.log(`Виджет ${el.id} перемещен в (${x}, ${y})`);
}
};
Заглушки позволяют отслеживать вызовы методов, проверять параметры, передаваемые в сетку, и предотвращать реальные изменения DOM. Это особенно полезно для unit-тестирования и автоматизации проверки логики работы виджетов.
Для комплексного тестирования интерфейсов Gridstack.js моки и заглушки часто используются вместе:
mockWidgets.forEach(widget => {
gridStub.addWidget(`<div id="${widget.id}">${widget.content}</div>`, {
x: widget.x,
y: widget.y,
w: widget.width,
h: widget.height
});
});
// Проверка перемещения
gridStub.move({ id: 'widget1' }, 1, 2);
Такой подход позволяет моделировать:
Gridstack.js тесно интегрируется с инструментами тестирования, такими как Jest или Mocha. Моки и заглушки упрощают создание тестовых сценариев:
test('Добавление виджета с моками', () => {
const consoleSpy = jest.spyOn(console, 'log');
gridStub.addWidget('<div id="test"></div>', { x: 0, y: 0, w: 2, h: 2 });
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Добавлен виджет:'));
});
Использование моков позволяет изолировать сетку от внешних зависимостей и проверять только поведение самой библиотеки и логики виджетов.
Для более сложных интерфейсов можно создавать функции, генерирующие моки на лету:
function generateWidgets(count) {
return Array.from({ length: count }, (_, i) => ({
id: `widget${i + 1}`,
x: i % 5,
y: Math.floor(i / 5),
width: 1 + (i % 3),
height: 1 + (i % 2),
content: `Виджет ${i + 1}`
}));
}
const dynamicWidgets = generateWidgets(10);
dynamicWidgets.forEach(widget => gridStub.addWidget(`<div id="${widget.id}">${widget.content}</div>`, widget));
Это позволяет моделировать масштабные сетки и проверять работу алгоритмов компоновки и коллизий при разных конфигурациях.
Моки и заглушки становятся ключевым инструментом при разработке динамических интерфейсов на Gridstack.js, позволяя создавать надежные, предсказуемые и легко тестируемые приложения.