Aflevering 4: door Robert in Waterloo, ON (juli 2019)
Vorige afleveringen
Als je met Blink werkt, ken je misschien web_tests (voorheen LayoutTests). web-platform-tests (WPT) bevindt zich in web_test/external/wpt
. WPT is de voorkeursmanier om webfuncties te testen, omdat het via GitHub met andere browsers wordt gedeeld. Het heeft twee hoofdtypen tests: reftests en testharness.js -tests.
reftests maken en vergelijken screenshots van twee pagina's. Standaard worden schermafbeeldingen gemaakt nadat de load
is geactiveerd; als je een reftest-wait
klasse aan het <html>
-element toevoegt, wordt de schermafbeelding gemaakt wanneer de klasse wordt verwijderd. Uitgeschakelde tests betekenen een afnemende testdekking. Houd rekening met lettertype-gerelateerde schilfering; gebruik indien mogelijk het lettertype Ahem
.
testharness.js is een JavaScript-framework voor het testen van alles behalve rendering. Let bij het schrijven van testharness.js-tests op de timing en vergeet niet de globale status op te ruimen.
Schilferige time-out en mogelijke gelekte toestanden:
<script> promise_test(async t => { assert_equals(await slowLocalStorageTest(), "expected", "message"); localStorage.clear(); }); </script>
Een betere test met lange time-out en opschoning:
<meta name="timeout" content="long"> <script> promise_test(async t => { t.add_cleanup(() => localStorage.clear()); assert_equals(await slowLocalStorageTest(), "expected", "message"); }); </script>
Gebruik testdriver.js als u automatisering nodig heeft die anders niet beschikbaar is op internet. U kunt een gebruikersgebaar krijgen van test_driver.bless
, complexe, vertrouwde invoer genereren met test_driver.action_sequence
, enz.
WPT biedt ook enkele nuttige functies aan de serverzijde via bestandsnamen. Multi-globale tests ( .any.js
en zijn vrienden) voeren dezelfde tests uit in verschillende scopes ( window
, worker
, enz.); .https.sub.html
vraagt om de test te laden via HTTPS met ondersteuning voor vervanging aan de serverzijde, zoals hieronder:
var anotherOrigin = "https://{{hosts[][www1]}}:{{ports[https][0]}}/path/to/page.html";
Sommige functies kunnen ook worden ingeschakeld in queryreeksen. baz.html?pipe=sub|header(X-Key,val)|trickle(d1)
maakt vervanging mogelijk, voegt X-Key: val
toe aan de headers van het antwoord en vertraagt 1 seconde voordat er wordt gereageerd. Zoek naar "pipes" op web-platform-tests.org voor meer informatie.
WPT kan ook gedrag testen dat nog niet in de specificaties is opgenomen; noem de test gewoon .tentative
. Als je interne API's van Blink nodig hebt (bijvoorbeeld testRunner
, internals
), plaats je tests in web_tests/wpt_internal
.
Wijzigingen in WPT worden automatisch geëxporteerd naar GitHub. Je ziet commentaar van een bot in je CL. GitHub-wijzigingen van andere leveranciers worden ook continu geïmporteerd. Om automatisch ingediende bugs te ontvangen wanneer nieuwe fouten worden geïmporteerd, maakt u een OWNERS
bestand aan in een submap in WPT:
# TEAM: your-team@chromium.org
# COMPONENT: Blink>YourComponent
# WPT-NOTIFY: true
emails-here-will-be-cc@chromium.org
Aanvullende bronnen
- Wilt u weten hoe uw tests in andere browsers werken en hoe interoperabel uw functie is? Gebruik wpt.fyi .
- Op zoek naar meer documentatie over API's, richtlijnen, voorbeelden, tips en meer? Bezoek webplatform-tests.org .