Как обновить hermione до версии 7.x
Если в вашем проекте hermione младше 4-й версии, то прочтите сначала «Как обновить hermione до версии 4.x», «Как обновить hermione до версии 5.x» и «Как обновить hermione до версии 6.x».
Мы рекомендуе м вам обновлять hermione поэтапно, убеждаясь на каждом этапе, что все тесты проекта корректно выполняются.
Что изменилось?
Мажорные изменения
Отказ от поддержки Node.JS < 16.x
В этом мажоре hermione перестала поддерживать версии Node.JS < 16.x.
Обработка unhandled rejection
При возникновении ошибки Unhandled rejection
в мастере или воркерах hermione теперь выполняем graceful shutdown. Это означает, что все последующие тесты в очереди завершаются с ошибкой Browser request was cancelled
и сама hermione завершается с exit code 1
.
Данное изменение необходимо, чтобы защитить пользователей от написания некорректных тестов. Пример теста с ошибкой:
it("test", async ({ browser }) => {
await browser.url("https://yandex.ru/search/?text=aaa");
expect(browser).toHaveUrlContaining("foo-bar-baz");
});
Внимательный читатель заметит, что я забыл указать await
перед вызовом expect
. В этом случае тест сразу после перехода по урлу завершится успешно. И только потом вылетит ошибка с Unhandled rejection
, которую hermione@6 проглатывает. А hermione@7 перехватит и экстренно завершит запуск тестов. К сожалению, определить из какого теста вылетела ошибка Unhandled rejection
невозможно. Так как тест может быть написан, например, так:
it("test2", async () => {
new Promise((resolve, reject) => {
setTimeout(() => {
reject("Something goes wrong");
}, 30000);
});
});
Т.е. данный тест сразу же выполнится успешно и только через 30 секунд (с учетом того, что в очереди еще есть тесты на запуск) вылетит Unhandled rejection
.
Соответственно, для поиска проблемного теста нужно будет посмотреть в лог выполнения и найти последние выполнившиеся тесты перед информацией об ошибке. Ошибка будет выглядеть примерно так:
[13:48:57 GMT+3] Unhandled Rejection in hermione:worker:10830:
Promise: {}
Reason: Something goes wrong
[13:48:57 GMT+3] Terminating on critical error: Unhandled Rejection in hermione:worker:10830:
Promise: {}
Reason: Something goes wrong
test.id и suite.id теперь свойства
id
для теста и сьюта теперь является свойством, а не методом, и, соответственно, необходимо его использовать как test.id
или suite.id
. Вызов test.id
обычно используется в конфиге hermione для определения опции screenshotsDir.
Удалена опция saveHistory из конфига
Удалена опция saveHistory из конфига. Теперь необходимо использовать saveHistoryMode с доступными значениями: all
, none
, onlyFailed
. По умолчанию используется all
, т.е. история сохраняется для всех тестов. Соответственно, можно данную опцию не выставлять явно.