Odcinek 4: Robert in Waterloo, W dniu (lipiec 2019 r.)
Poprzednie odcinki
Jeśli pracujesz nad Blink, być może znasz np. web_tests (dawniej UkładTests).
web-platform-tests (WPT) znajduje się w obrębie web_test/external/wpt
. WPT to preferowany sposób testowania funkcji internetowych, ponieważ są one udostępniane innym przeglądarkom przez GitHuba. Zawiera 2 główne typy testów: testy reftests i testharness.js.
reftesty wykonują i porównują zrzuty ekranu dwóch stron. Domyślnie zrzuty ekranu są wykonywane po wywołaniu zdarzenia load
. Jeśli dodasz do elementu <html>
klasę reftest-wait
, zrzut ekranu zostanie wykonany po usunięciu klasy.
Wyłączone testy oznaczają zmniejszenie zasięgu testów. Pamiętaj o niestabilności czcionki. W miarę możliwości używaj czcionki Ahem
.
testharness.js to platforma JavaScript do testowania wszystkiego poza renderowaniem. Pisząc testy testharness.js, zwracaj uwagę na czas i pamiętaj o wyczyszczeniu stanu globalnego.
Niestabilny czas oczekiwania i potencjalne wycieki:
<script> promise_test(async t => { assert_equals(await slowLocalStorageTest(), "expected", "message"); localStorage.clear(); }); </script>
Lepszy test z długim czasem oczekiwania i czyszczeniem:
<meta name="timeout" content="long"> <script> promise_test(async t => { t.add_cleanup(() => localStorage.clear()); assert_equals(await slowLocalStorageTest(), "expected", "message"); }); </script>
Jeśli potrzebujesz automatyzacji, która w innym przypadku nie jest dostępna w internecie, użyj pliku testdriver.js.
Możesz wykonać gest użytkownika z funkcji test_driver.bless
i generować złożone, zaufane dane wejściowe za pomocą test_driver.action_sequence
itp.
WPT udostępnia też przydatne funkcje działające po stronie serwera w postaci nazw plików.
Testy wieloglobalne (.any.js
i jego znajomi) przeprowadzają te same testy w różnych zakresach (window
, worker
itp.); .https.sub.html
prosi, aby test był wczytywany przez HTTPS z obsługą zastępowania po stronie serwera w ten sposób:
var anotherOrigin = "https://{{hosts[][www1]}}:{{ports[https][0]}}/path/to/page.html";
Niektóre funkcje można też włączyć w ciągach zapytań.
baz.html?pipe=sub|header(X-Key,val)|trickle(d1)
umożliwia zastępowanie, dodaje element X-Key: val
do nagłówków odpowiedzi i opóźnia 1 sekundę przed udzieleniem odpowiedzi. Aby dowiedzieć się więcej, wyszukaj „potoki” na stronie web-platform-tests.org.
WPT może też testować zachowania, które nie są jeszcze uwzględnione w specyfikacji. Test po prostu nazywa się .tentative
. Jeśli potrzebujesz wewnętrznych interfejsów API Blink (np. testRunner
, internals
), umieść testy w web_tests/wpt_internal
.
Zmiany wprowadzone w WPT są automatycznie eksportowane do GitHuba. Na liście zmian zobaczysz komentarze od bota. Zmiany w GitHubie od innych dostawców również są importowane na bieżąco. Aby otrzymywać automatycznie zgłaszane błędy po zaimportowaniu nowych błędów, utwórz plik OWNERS
w podkatalogu w WPT:
# TEAM: your-team@chromium.org
# COMPONENT: Blink>YourComponent
# WPT-NOTIFY: true
emails-here-will-be-cc@chromium.org
Dodatkowe materiały
- Chcesz dowiedzieć się, jak przebiegają testy w innych przeglądarkach i jak współdziałają ze sobą Twoje funkcje? Użyj ciągu wpt.fyi.
- Szukasz dodatkowej dokumentacji interfejsów API, wytycznych, przykładów, wskazówek i innych informacji? Wejdź na stronę web-platform-tests.org.