Pull to refresh

Comments 9

Вы заметили, что в варианте с done тест выполняется быстрее (345 секунд против 419)?

for { await waitForExpect(..) } запускает проверки строго последовательно - следующая стратует когда дождались результата предыдущей.

for { waitForExpect(..) }; Promise.all() запускает все проверки практически одновременно, а потом ждет когда они все завершатся.

Мне кажется такое преобразование, как минимум не эквивалентным, а может и ошибочным.

И в чем нарушение эквивалентности?

В том, что при последовательном запуске каждому следующему вызову доступны результат и все побочные эффекты предыдущих. При одновременном запуске такого, естественно, не может быть.

Разве это не очевидно?

Это unit тест для клиентской части веб приложения. Который проверяет, была ли вызванна та или иная функция. Т.е. он не проверяет внутреннее сосотояние объекта. Другой тест возможно проверяет их там 558, но не этот. Воторой момент - на клиенте, по возможности, все должно работать быстро и асинхронно, т.к. мы имеем дело с событиями, которые не обязательно вызываются последовательно. Отсюда, код клиентской части чаще всего асинхронный, хотя могут быть какие-то зависимости, но конечно же при написании юнит теста это проверяется. Суть текущего теста - просто подача входных значений из массива и проверка что определенные функции внутри кода вызываются или не вызываются при этом. Я не писал этот тест изначально, о чем сказанно в публикации. Но изменение async/await на Promise в юнит тесте точно никак не влияет на логику как самого теста, так и тестируемого кода в данном конкретном случае.

точно никак не влияет на логику

Как раз на логику и влияет, не влияет на конечный результат, проверяемый тестом.

Зависит от того, что понимать под логикой работы. Публиуация правда совсем не об этом.

345 секунд против 419 - это было на разных виртуальных машинах. Я просто версию до изменений развернул на одной виртуалке, а версию с изменениями на другой. Одна из виртуалок была довольно слабой, другая наоборот довольно сильной.

Проблема в том, что если в коде есть вызов команды console.error и мы пишем unit тест на этот код, то при выполнении мы увидим в логе сообщение об ошибке и стэк до этой ошибки. В случае с unit тестом, это ожидаемое поведение,

Не сказал бы, что это ожидаемое поведение. Я бы ожидал увидеть в логах CI только строки успешно завершенных тестов, а в самих тестах я бы ожидал увидеть моки логирования. Заодно и текст ошибок проще проверить.

Думаю я не совсем корректно выразился, либо был не так понят. Под "ожидаемым поведением" я имел ввиду наличие сообщения об ошибке в тесте. Т.к. тест проверяет - будет ли выброшенно исключение в случае неверных данных. Что выводить в логи а что нет, это я думаю на вкус и цвет. В данном проекте логи выводились, как я написал выше, мне он достался уже в таком виде.

Sign up to leave a comment.

Articles