2bbe2a7612
Метрика была потеряна, т.к. клалась мимо конвейера: выкат = 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>
48 lines
1.8 KiB
TypeScript
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');
|
|
});
|
|
});
|