Chromium Chronicle n.o 4: Prueba las funciones de tu plataforma web con WPT

Episodio 4: por Robert in Waterloo, Ontario (julio de 2019)
Episodios anteriores

Si trabajas en Blink, es posible que conozcas web_tests (anteriormente, LayoutTests). web-platform-tests (WPT) se encuentra dentro de web_test/external/wpt. WPT es la forma preferida de probar las funciones expuestas en la Web, ya que se comparten con otras navegadores a través de GitHub. Tiene dos tipos principales de pruebas: reftests y testharness.js.

Las pruebas de referencia toman y comparan capturas de pantalla de dos páginas. De forma predeterminada, las capturas de pantalla se toman después de que se activa el evento load si agregas una clase reftest-wait al elemento <html>, se tomará la captura de pantalla cuando se quite la clase. Si inhabilitas las pruebas, disminuirá la cobertura de la prueba. Tenga en cuenta las fuentes fragilidad; usa la fuente Ahem cuando sea posible.

testharness.js es un framework de JavaScript para probar cualquier elemento. excepto la renderización. Cuando escribas pruebas testharness.js, presta atención al tiempo, y recuerda limpiar el estado global.

Tiempo de espera inestable y posibles estados filtrados:

Qué no debes hacer
<script>
promise_test(async t => {
  assert_equals(await slowLocalStorageTest(), "expected", "message");
  localStorage.clear();
});
</script>

Una prueba mejor con tiempos de espera prolongados y limpieza:

Qué debes hacer
<meta name="timeout" content="long">
<script>
promise_test(async t => {
  t.add_cleanup(() => localStorage.clear());
  assert_equals(await slowLocalStorageTest(), "expected", "message");
});
</script>

Usa testdriver.js si necesitas automatización, que no estará disponible en la Web. Puedes obtener un gesto del usuario de test_driver.bless, generar entradas confiables con test_driver.action_sequence, etcétera

WPT también proporciona algunas funciones útiles del servidor por medio de nombres de archivos. Las pruebas multiglobal (.any.js y sus amigos) ejecutan las mismas pruebas en diferentes alcances (window, worker, etc.); .https.sub.html solicita que se cargue la prueba. a través de HTTPS con soporte de sustitución del servidor, como se muestra a continuación:

var anotherOrigin = "https://&#123;&#123;hosts[][www1]}}:&#123;&#123;ports[https][0]}}/path/to/page.html";

Algunas funciones también se pueden habilitar en las cadenas de consulta. baz.html?pipe=sub|header(X-Key,val)|trickle(d1) habilita la sustitución y agrega X-Key: val. a los encabezados de la respuesta y tarda 1 segundo antes de responder. Busca "canalizaciones" en web-platform-tests.org para obtener más información.

WPT también puede probar comportamientos que aún no están incluidos en las especificaciones. Solo Asígnale el nombre .tentative a la prueba. Si necesitas las APIs internas de Blink (p.ej., testRunner, internals), coloca las pruebas en web_tests/wpt_internal.

Los cambios realizados en WPT se exportan automáticamente a GitHub. Verás lo siguiente: comentarios de un bot en tu CL. Los cambios de GitHub de otros proveedores también se importan continuamente. Para recibir errores presentados automáticamente cuando se producen fallas nuevas crea un archivo OWNERS en un subdirectorio en WPT:

# TEAM: your-team@chromium.org
# COMPONENT: Blink>YourComponent
# WPT-NOTIFY: true
emails-here-will-be-cc@chromium.org

Recursos adicionales

  • Deseas saber cómo se ejecutan tus pruebas en otros navegadores y qué tan interoperable es tu atributo? Usa wpt.fyi.
  • ¿Buscas más documentación sobre APIs, lineamientos, ejemplos, sugerencias y mucho más? Visita web-platform-tests.org.