Files
portal/app/tests/Frontend/metrika.spec.ts
T
Дмитрий 2bbe2a7612 feat(metrika): Метрика+Вебвизор в линию портала (чтобы выкаты не теряли)
Метрика была потеряна, т.к. клалась мимо конвейера: выкат = git archive HEAD ветки
+ пересборка, а Метрика жила отдельно → перезатёрлась. Кладём в feat/portal-mobile-adaptive
(линию, из которой режутся deploy/*-ветки) → любой будущий выкат несёт её сам.

Загрузчик metrika.ts (только кабинет layout=app), маскировка ПДн лидов
(ym-hide-content/ym-disable-keys) — десктоп-таблица + МОБИЛЬНЫЕ карточки (телефон+
комментарий+aria-label) + канбан + карточка сделки + диалог. Сборка проходит.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 17:00:37 +03:00

48 lines
1.8 KiB
TypeScript

import { describe, it, expect, beforeEach, vi } from 'vitest';
/**
* Тесты ленивого загрузчика Яндекс.Метрики (resources/js/plugins/metrika.ts).
* Загрузчик грузится только из роутера при входе в кабинет (см. router/index.ts).
*/
describe('metrika loader', () => {
beforeEach(() => {
document.head.innerHTML = '';
document.body.innerHTML = '';
delete window.ym;
vi.resetModules();
});
it('без meta-тега ничего не грузит и не падает', async () => {
const { ensureLoaded } = await import('../../resources/js/plugins/metrika');
ensureLoaded();
expect(document.querySelector('script[src*="mc.yandex.ru"]')).toBeNull();
});
it('с meta-тегом инжектит tag.js один раз (идемпотентно)', async () => {
const meta = document.createElement('meta');
meta.name = 'metrika-id';
meta.content = '99999999';
document.head.appendChild(meta);
const { ensureLoaded } = await import('../../resources/js/plugins/metrika');
ensureLoaded();
ensureLoaded();
const scripts = document.querySelectorAll('script[src*="mc.yandex.ru/metrika/tag.js"]');
expect(scripts.length).toBe(1);
});
it('hit() вызывает window.ym с id из meta и переданным url', async () => {
const meta = document.createElement('meta');
meta.name = 'metrika-id';
meta.content = '99999999';
document.head.appendChild(meta);
const ym = vi.fn();
window.ym = ym;
const { hit } = await import('../../resources/js/plugins/metrika');
hit('/dashboard');
expect(ym).toHaveBeenCalledWith(99999999, 'hit', '/dashboard');
});
});