День 1. Scope в JavaScript — почему переменные “пропадают” в автотестах
Для инженера по автоматизации понимание Scope (области видимости) — критически важный навык. Именно из-за него возникают ошибки вроде: «Я же только что нашел элемент в цикле, почему я не могу использовать его дальше?» В этом видео мы разбираем: - что такое Scope простыми словами, - почему let и const имеют блочную область видимости, - почему переменные “умирают” после { }, - как правильно проектировать тесты, чтобы данные были доступны там, где нужно. Официальное определение: Область видимости — это контекст выполнения, в котором переменные «видны» или доступны. `let` и `const` имеют блочную область видимости, то есть они существуют только внутри пары фигурных скобок `{ }`, где были объявлены. Простыми словами:*Это «зона доступа». Если ты создал переменную внутри функции, цикла или условия `if`, она заперта там на замок. Снаружи ты её не достанешь. Пример 1: Ошибка видимости в UI-тесте Представь, что ты ищешь текст ошибки на странице внутри блока `if`. if (isErrorVisible) { const errorMessage = "Invalid password"; // Переменная создана ВНУТРИ блока console.log(errorMessage); // Здесь она работает } // Попытка использовать сообщение для финального отчета в конце теста: console.log("Тест завершен с ошибкой: " + errorMessage); // РЕЗУЛЬТАТ: ReferenceError: errorMessage is not defined // Тест упадет, потому что errorMessage "умерла" сразу после закрывающей скобки }. ``` Пример 2: Переменные в блоке `try...catch` В тестах мы часто используем `try...catch`, чтобы тест не падал при первой же ошибке. Это классический пример, где новички теряют переменные. try { const response = await api.get('/user/1'); // Переменная заперта внутри try let status = response.status; } catch (error) { console.log("Запрос не удался"); } // Мы хотим проверить статус в конце теста // console.log(status); // ОШИБКА! status не виден вне блока try. // КАК ПРАВИЛЬНО: let status; // Объявляем снаружи (внешний scope) try { const response = await api.get('/user/1'); status = response.status; // Присваиваем значение внутри } catch (e) { /*...*/ } console.log(status); // ТЕПЕРЬ РАБОТАЕТ! ``` Пример 3: Циклы (перебор элементов) Когда мы перебираем строки таблицы или список товаров, переменная цикла живет только внутри этого перебора. const items = ["Apple", "Banana", "Cherry"]; for (let i = 0; i меньше items.length; i++) { const currentItem = items[i]; console.log(`Проверяем товар: ${currentItem}`); // Работает внутри } // console.log(currentItem); // ОШИБКА! Переменная currentItem существовала только пока работал цикл. ``` Итог: Если вы объявили переменную внутри `{ }`, помните: "всё, что было в Лас-Вегасе (внутри скобок), остается в Лас-Вегасе." Чтобы использовать данные снаружи, нужно объявить переменную (через `let`) ДО начала блока со скобками.
Название:
День 1. Scope в JavaScript — почему переменные “пропадают” в автотестах
Категория:
Разное