Тестирование
SDK поставляет мок-контекст, чтобы ваши тесты использовали точно ту же форму, что и продакшен.
createMockPlatformContext
ts
import { createMockPlatformContext } from '@tv/extension-sdk/testing';
import { PlatformProvider } from '@tv/extension-sdk/react';
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders the building name', () => {
const ctx = createMockPlatformContext({
user: { ...defaultUser, roles: ['manager'] },
building: { id: 'b1', name: 'Demo Mall' },
});
render(
<PlatformProvider value={ctx}>
<App />
</PlatformProvider>,
);
expect(screen.getByText(/Demo Mall/)).toBeInTheDocument();
});Почему мок, а не собственная реализация
Если вы собираете PlatformContext в тестах вручную, вы можете отойти от настоящей формы — и ваши тесты проходят, пока продакшен ломается. createMockPlatformContext() построен из тех же типов, что внедряет платформа, поэтому:
- Изменения типов поверхности контекста ломают ваши тесты на этапе компиляции (это хорошо — вы узнаёте рано).
- Мок клиента
apiимеет те же сигнатуры методов, что и настоящий.
Подмена ответов API
Клиент api мока можно переопределить:
ts
const ctx = createMockPlatformContext({
api: {
get: vi.fn().mockResolvedValue([{ id: 's1', name: 'Unit 3B' }]),
},
});Чек-лист самодиагностики
Прежде чем открывать обращение в поддержку, пройдите по нему — большинство проблем решается здесь:
- Какая версия SDK?
cat node_modules/@tv/extension-sdk/package.json | jq .version - Манифест валиден?
npx tv-sdk validate module-manifest.json - События и разрешения в каталоге?
npx tv-sdk check-events - Используете символ
@experimental? Просмотрите импорты — такие символы могут меняться между релизами. - Сообщается ли о работоспособности (heartbeat)? Проверьте точку вашего модуля на боковой панели Building OS.
- Тесты используют
createMockPlatformContext()?
Если все шесть пунктов чистые, а проблема остаётся — она на стороне платформы; заведите обращение с выводом чек-листа.