Episodio 4: di Robert in Waterloo, ON (luglio 2019)
Puntate precedenti
Se lavori su Blink, potresti conoscere web_tests (in precedenza LayoutTests).
Web-platform-tests (WPT) si trova all'interno di web_test/external/wpt
. WPT è il modo preferito per testare le funzionalità esposte al web, in quanto viene condiviso con altri browser tramite GitHub. Prevede due tipi principali di test: reftests e testharness.js.
reftests acquisisce e confronta gli screenshot di due pagine. Per impostazione predefinita, gli screenshot vengono acquisiti dopo l'attivazione dell'evento load
. Se aggiungi una classe reftest-wait
all'elemento <html>
, lo screenshot viene acquisito quando viene rimossa la classe.
I test disattivati riducono la copertura dei test. Fai attenzione alle irregolarità dei caratteri. Se possibile, usa il carattere Ahem
.
testharness.js è un framework JavaScript per testare qualsiasi cosa tranne il rendering. Quando scrivi i test testharness.js, presta attenzione alle tempistiche e ricorda di ripulire lo stato globale.
Timeout irregolare e potenziale perdita di dati:
<script> promise_test(async t => { assert_equals(await slowLocalStorageTest(), "expected", "message"); localStorage.clear(); }); </script>
Un test migliore con timeout e pulizia lunghi:
<meta name="timeout" content="long"> <script> promise_test(async t => { t.add_cleanup(() => localStorage.clear()); assert_equals(await slowLocalStorageTest(), "expected", "message"); }); </script>
Utilizza testdriver.js se ti serve l'automazione che altrimenti non è disponibile sul web.
Puoi ottenere un gesto dell'utente da test_driver.bless
, generare input complessi e attendibili con test_driver.action_sequence
e così via.
WPT fornisce anche alcune utili funzionalità lato server attraverso i nomi dei file.
I test multiglobali (.any.js
e i suoi amici) eseguono gli stessi test in ambiti diversi (window
, worker
e così via); .https.sub.html
richiede il caricamento del test tramite HTTPS con il supporto della sostituzione lato server come riportato di seguito:
var anotherOrigin = "https://{{hosts[][www1]}}:{{ports[https][0]}}/path/to/page.html";
Alcune funzionalità possono essere abilitate anche nelle stringhe di query.
baz.html?pipe=sub|header(X-Key,val)|trickle(d1)
consente la sostituzione, aggiunge X-Key: val
alle intestazioni della risposta e ritarda di 1 secondo prima di rispondere. Cerca "pipe" su web-platform-tests.org per ulteriori informazioni.
WPT può anche testare comportamenti non ancora inclusi nelle specifiche; basta assegnare al test il nome .tentative
. Se ti servono le API interne Blink (ad es.
testRunner
, internals
), inserisci i tuoi test in web_tests/wpt_internal
.
Le modifiche apportate al WPT vengono esportate automaticamente in GitHub. Nel tuo CL vedrai i commenti di un bot. Anche le modifiche a GitHub di altri fornitori vengono importate in modo continuo. Per ricevere i bug segnalati automaticamente quando vengono importati nuovi errori, crea un file OWNERS
in una sottodirectory in WPT:
# TEAM: your-team@chromium.org
# COMPONENT: Blink>YourComponent
# WPT-NOTIFY: true
emails-here-will-be-cc@chromium.org
Altre risorse
- Vuoi scoprire come vengono eseguiti i test su altri browser e quanto è interoperabile la tua funzionalità? Utilizza wpt.fyi.
- Cerchi ulteriore documentazione su API, linee guida, esempi, suggerimenti e altro ancora? Visita web-platform-tests.org.