@triggery/testing
Утилиты для тестирования Triggery. Без рантайм-зависимостей, framework-agnostic — одинаково работает в тестах React, Solid, Vue, в Node или воркере; совместимо с Vitest, Jest и node:test.
Тот же код триггера, который ты отправляешь в прод, выполняется в тестах без React, JSDOM или хост-фреймворка. Ты тестируешь сценарии, а не компоненты.
Установка
Заголовок раздела «Установка»pnpm add -D @triggery/core @triggery/testing npm install --save-dev @triggery/core @triggery/testing yarn add --save-dev @triggery/core @triggery/testing bun add -D @triggery/core @triggery/testing Peer-зависимости: @triggery/core. Test-runner agnostic — никакой зависимости от vi.useFakeTimers() / jest.useFakeTimers().
Что внутри
Заголовок раздела «Что внутри»| Экспорт | Назначение |
|---|---|
createTestRuntime({ triggers? }) | Изолированный рантайм на каждый тест. Без загрязнения глобального состояния. |
mockCondition(trigger, name, value | getter) | Подсунуть условие без рендера компонента. |
mockAction(trigger, name, fn) | Зарегистрировать обработчик действия — обычно vi.fn() / jest.fn(). |
flushMicrotasks() | Опустошить дефолтный микротаск-шедулер перед проверкой. |
createFakeScheduler() | Управляемые виртуальные часы для actions.debounce / throttle / defer. |
createFakeScheduler() предоставляет:
install()/uninstall()— подменяютglobalThis.setTimeout/clearTimeoutконтролируемой реализацией.advance(ms)— выполняет все таймеры, попадающие в окно, и опустошает микротаски.flushAll()— выполняет все ожидающие таймеры независимо от запланированного времени.
Быстрый пример
Заголовок раздела «Быстрый пример»Триггер, который проверяет условие user.isMod и выполняет два действия:
Без DOM, без провайдера, без act(). Триггер прогоняется напрямую.
Фейковый шедулер — тестируем debounce
Заголовок раздела «Фейковый шедулер — тестируем debounce»Асинхронные обработчики — take-latest
Заголовок раздела «Асинхронные обработчики — take-latest»Связанные пакеты
Заголовок раздела «Связанные пакеты» @triggery/core Тот же рантайм, только создан через createTestRuntime.
@triggery/react Тесты на уровне компонентов поверх React Testing Library.
@triggery/solid Тесты для Solid через @solidjs/testing-library.
@triggery/vue Тесты для Vue через @vue/test-utils.
@triggery/eslint-plugin Статические проверки, которые ловят то, что тесты могут упустить.