Ответ
Кэширование тестового контекста — это оптимизация в тестировании, когда данные или состояние, общие для нескольких тестов, создаются один раз и переиспользуются между тестами. Это ускоряет выполнение тестов, особенно если подготовка контекста затратна (например, создание БД, моки API).
Пример в Jest:
let sharedResource;
beforeAll(() => {
sharedResource = initializeExpensiveResource(); // Выполнится 1 раз для всех тестов
});
test('test 1', () => {
expect(sharedResource).toBeDefined();
});
test('test 2', () => {
expect(sharedResource.property).toEqual('value');
});
Нюансы:
- Изменения контекста в одном тесте влияют на другие (антипаттерн)
- Для изоляции лучше использовать
beforeEachвместоbeforeAll - Особенно полезно для интеграционных и E2E тестов
Ответ 18+ 🔞
Да ты посмотри, какая хитрая жопа придумана! Кэширование тестового контекста, ёпта. Это ж когда ты, блядь, не хочешь каждый раз, как обезьяна, одно и то же делать перед каждым тестом.
Представь: тебе надо базу данных накатить, или там API замокать — дело долгое, пиздец как затратное. А тут раз — и сделал один раз перед всеми, и пошёл тесты гонять, как угорелый. Скорость, блядь, растёт, как на дрожжах!
Вот смотри, как в Jest это выглядит, тут всё просто:
let sharedResource; // Вот эта переменная — наша палочка-выручалочка
beforeAll(() => {
sharedResource = initializeExpensiveResource(); // Всё, блядь, инициализировали ОДИН РАЗ на всех
});
test('test 1', () => {
expect(sharedResource).toBeDefined(); // И тут она уже есть, готовая
});
test('test 2', () => {
expect(sharedResource.property).toEqual('value'); // И тут, сука, та же самая!
});
Но тут, блядь, главное — не наступить на грабли, а то лоб себе расшибёшь! Запомни раз и навсегда: если один тест эту sharedResource по-тихому изменит, то следующий тест её уже в изменённом виде получит. И пойдёт пляска с бубном: "А почему у меня тест падает, я же нихуя не трогал?". Это, блядь, классический антипаттерн, источник плавающих багов, которые ебут мозг.
Поэтому, если тесты должны быть изолированными, как монахи в кельях, то юзай beforeEach. Он, конечно, медленнее, зато каждый тест начинает с чистого листа, и волнение ебать — ноль.
А вот для интеграционных тестов, где надо поднять целую инфраструктуру, — тут да, beforeAll просто царь и бог. Один раз настроил — и овердохуища тестов прогнал. Красота!