Saltar al contenido

Cobertura de test262

test262 es la suite oficial de pruebas de conformidad mantenida por TC39 y la forma canónica de comparar motores de JavaScript.

Phasis supera la suite completa con 100 % en todas las categorías: semántica del lenguaje, la biblioteca estándar, Intl, funciones web heredadas de annexB, el directorio staging de pruebas en fase de incubación y las autopruebas del harness. No hay omisiones por indicadores de funcionalidad, listas de bloqueo por carencias del entorno anfitrión ni exclusiones por fragmento.

La suite está fijada: el submódulo de Git test262 fija la revisión contra la que se mide Phasis, y las nuevas pruebas upstream solo cuentan después de actualizar el submódulo. La instantánea de la suite completa en COMPAT.md se vuelve a generar con el flujo de trabajo compat-matrix.yml, que se inicia manualmente y no en cada push; COMPAT.md registra cuándo se tomó la instantánea y contra qué commit.

A modo de comparación, test262.fyi ejecuta la misma suite en cada motor JS de producción:

Motor Conformidad
V8 (Chrome / Node) 99.8 %
SpiderMonkey (Firefox) 99.6 %
JavaScriptCore (Safari) 99.4 %
QuickJS ~97 %
Hermes (React nativo) ~95 %
Phasis 100 %

Cada uno de esos motores aún tiene una pequeña brecha residual (propuestas recién incorporadas y casos límite poco frecuentes en desarrollo). Phasis la cierra al ser una implementación de propósito único, centrada en la conformidad.

Ejecutarlo localmente

El ejecutor necesita el submódulo test262 y las clases de prueba del repositorio, que no se incluyen en el paquete Composer; por eso debes ejecutarlo desde un clon:

Shell
git clone https://github.com/inline0/phasis
cd phasis
git submodule update --init test262
composer install
./bin/test262 --jobs 4

Una ejecución completa tarda unos 20 minutos en un Mac reciente; la matriz de CI divide las pruebas en paralelo y termina en unos pocos minutos.

Para ejecutar una sola categoría mientras depuras:

Shell
./bin/test262 --category built-ins/Array
./bin/test262 --category language/expressions/yield --failures

Consulta la referencia de CLI para ver el conjunto completo de indicadores.

Por qué importa

JavaScript tiene una semántica sutil: NaN !== NaN, -0 === 0, [1] + 1 === "11", el orden exacto de enumeración de propiedades y el momento en que se ejecutan las microtareas de Promise. Una biblioteca que ejecuta código de usuario JS debe acertar en todos esos detalles cada vez. test262 establece el criterio de lo correcto; superarlo con un 100 % significa que un programa JS que se ejecuta en V8 produce una salida idéntica byte por byte en Phasis (salvo por las API exclusivas del navegador).