Объявите textValue в describe, а присваивайте в hook. Describe не должен быть async: асинхронная подготовка выполняется в before или beforeEach.
Корректировка области видимости переменной в тестах
Объявите textValue в describe, а присваивайте в hook. Describe не должен быть async: асинхронная подготовка выполняется в before или beforeEach.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В примере переменная textValue объявлена внутри хука before(), однако позже она используется за пределами своей области видимости, что приводит к ReferenceError. Чтобы устранить эту проблему, переменную необходимо объявить в более широком контексте, например, в блоке describe. После переноса объявления переменная будет доступна как в хуках, так и в самих тестах.
describe('TEST', async () => {
let textValue; // объявляем переменную в области describe
before(async function () {
textValue = 'Test String'; // инициализируем её
});
after(async function () {
endTest();
});
describe('First test case', async () => {
it('should update textValue', async () => {
textValue = 'New string'; // теперь переменная доступна
console.log(textValue); // выведет: "New string"
});
});
});
Ответ
Объявите textValue в describe, а присваивайте в hook. Describe не должен быть async: асинхронная подготовка выполняется в before или beforeEach.
Пример с изоляцией тестов:
import assert from 'node:assert/strict';
describe('TEST', function () {
let textValue;
beforeEach(function () { textValue = 'Test String'; });
it('updates textValue', function () {
textValue = 'New string';
assert.equal(textValue, 'New string');
});
});
BeforeEach сбрасывает значение перед каждым тестом. Console.log не заменяет assertion. Если endTest возвращает Promise, after должен его вернуть или дождаться await, иначе очистка может закончиться уже после hook.
Источник: mochajs.org.