Разве эти 2 не идентичны?
// ONE
describe('something', () => {
const someConst = 'yes'
it('should do something', () => {
// doing something
})
it('should do something else', () => {
// doing something else
})
})
// TWO
describe('something', () => {
let someNotConst
before(() => {
someNotConst = 'yes'
})
it('should do something', () => {
// doing something
})
it('should do something else', () => {
// doing something else
})
})
Это надуманный пример, чтобы продемонстрировать, что я имею в виду на общем уровне.
Моя догадка проста: в первом случае вы блокируете поток. Во втором вы можете воспользоваться обещаниями (и async / await), чтобы легко выполнять асинхронные операции :)
Еще одна важная вещь заключается в том, что Mocha может решать, что делать между инициализацией ваших тестов и их запуском, или делать что-то даже до инициализации. Это может быть важно в будущих версиях для совместимости.
Наконец, они также обеспечивают поддержку расширенной обработки ошибок, чтобы вы могли быстрее обнаруживать проблемы и быстрее их решать.
Не могли бы вы пояснить, что вы подразумеваете под «блокировкой потока»?
Блокировка потока означает, что вы заставляете движок выполнять действия синхронно, одну операцию за другой. Если у вас есть две длительные операции, такие как чтение большого файла и инициализация базы данных, вам придется выполнять обе одну за другой, и терять время.
В другом случае вы можете сделать такую вещь, которая будет запускать их параллельно и ждать обеих операций перед запуском тестов:
before(() => {
let p1 = readEnormousLogFile();
let p2 = initDatabaseWithAThousandTables();
return Promise.all([p1, p2]);
});
Спасибо! :) А куда мы возвращаем Promise в вашем фрагменте кода?
Возвращаем в сам Мокко. Однако он не использует возвращаемое значение, он просто ожидает его доступности, а затем запускает тесты.
Хорошо. Спасибо. Я не совсем понял «почему» своего первоначального вопроса, но, по крайней мере, я знаю, что лучше использовать ловушку «до».
Это просто хорошая практика. Путь №1 возможен, но №2 дает значительные преимущества, добавляет ясности и обеспечивает обратную совместимость. В свою очередь, использование # 1 кажется глупым, потому что вас не понимают :)
Не могли бы вы пояснить, что вы подразумеваете под «блокировкой потока»?