Эпизод 4: Роберт в Ватерлоо, Онтарио (июль 2019 г.)
Предыдущие серии
Если вы работаете над Blink, возможно, вы знаете о web_tests (ранее LayoutTests). web-platform-tests (WPT) находится внутри web_test/external/wpt
. WPT — предпочтительный способ тестирования функций, доступных в Интернете, поскольку он доступен другим браузерам через GitHub. Он имеет два основных типа тестов: рефтесты и тесты testharness.js .
рефтесты берут и сравнивают скриншоты двух страниц. По умолчанию снимки экрана создаются после запуска события load
; если вы добавите класс reftest-wait
к элементу <html>
, снимок экрана будет сделан при удалении класса. Отключение тестов означает уменьшение охвата тестами. Помните о нестабильности шрифтов; по возможности используйте шрифт Ahem
.
testharness.js — это JavaScript-фреймворк для тестирования чего угодно, кроме рендеринга. При написании тестов testharness.js обращайте внимание на время и не забывайте очищать глобальное состояние.
Ненадежный тайм-аут и потенциальные утечки состояний:
<script> promise_test(async t => { assert_equals(await slowLocalStorageTest(), "expected", "message"); localStorage.clear(); }); </script>
Лучший тест с длительным тайм-аутом и очисткой:
<meta name="timeout" content="long"> <script> promise_test(async t => { t.add_cleanup(() => localStorage.clear()); assert_equals(await slowLocalStorageTest(), "expected", "message"); }); </script>
Используйте testdriver.js, если вам нужна автоматизация, которая иначе недоступна в Интернете. Вы можете получить жест пользователя из test_driver.bless
, сгенерировать сложные, надежные входные данные с помощью test_driver.action_sequence
и т. д.
WPT также предоставляет некоторые полезные серверные функции через имена файлов. Мультиглобальные тесты ( .any.js
и его друзья) запускают одни и те же тесты в разных областях ( window
, worker
и т. д.); .https.sub.html
запрашивает загрузку теста через HTTPS с поддержкой замены на стороне сервера, как показано ниже:
var anotherOrigin = "https://{{hosts[][www1]}}:{{ports[https][0]}}/path/to/page.html";
Некоторые функции также можно включить в строках запроса. baz.html?pipe=sub|header(X-Key,val)|trickle(d1)
включает замену, добавляет X-Key: val
в заголовки ответа и задерживает 1 секунду перед ответом. Чтобы узнать больше, выполните поиск по запросу «pipe» на сайте web-platform-tests.org .
WPT также может тестировать поведение, которое еще не включено в спецификации; просто назовите тест как .tentative
. Если вам нужны внутренние API Blink (например, testRunner
, internals
), поместите свои тесты в web_tests/wpt_internal
.
Изменения, внесенные в WPT, автоматически экспортируются в GitHub. Вы увидите комментарии бота в своем ЛК. Изменения GitHub от других поставщиков также постоянно импортируются. Чтобы получать автоматически зарегистрированные ошибки при импорте новых сбоев, создайте файл OWNERS
в подкаталоге WPT:
# TEAM: your-team@chromium.org
# COMPONENT: Blink>YourComponent
# WPT-NOTIFY: true
emails-here-will-be-cc@chromium.org
Дополнительные ресурсы
- Хотите узнать, как ваши тесты выполняются в других браузерах и насколько совместима ваша функция? Используйте wpt.fyi .
- Ищете дополнительную документацию по API, рекомендации, примеры, советы и многое другое? Посетите веб-платформу-tests.org .