Gå til indhold

test262-dækning

test262 er den officielle testpakke for overensstemmelse, der vedligeholdes af TC39, og den autoritative måde at sammenligne JavaScript-motorer på.

Phasis består hele testpakken med 100 % i alle kategorier — sprogets semantik, standardbiblioteket, Intl, ældre webfunktioner, annexB, mappen staging med tests under udvikling samt testpakkens selvtests. Ingen omgåelse via funktionsflag, ingen blokeringslister over mangler i værtsmiljøet, ingen udeladelser pr. shard.

Testpakken er fastlåst: Git-undermodulet test262 fastlægger den revision, som Phasis måles mod, og nye tests fra upstream tæller først, når undermodulet opdateres. Snapshot af hele testpakken i COMPAT.md gendannes af workflowet compat-matrix.yml, som startes manuelt og ikke ved hver push; COMPAT.md registrerer, hvornår snapshot'et blev taget, og hvilken commit det bygger på.

Til sammenligning følger test262.fyi den samme testpakke på tværs af alle produktionsklare JS-motorer:

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

Hver af de andre motorer har stadig et lille hul (nyligt tilføjede forslag og sjældne kanttilfælde under udvikling). Phasis lukker hullet ved at være en målrettet implementering med fokus på overensstemmelse.

Kør lokalt

Kørselsværktøjet kræver undermodulet test262 og projektets testklasser, som ikke følger med Composer-pakken, så kør det fra en klon:

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

En fuld kørsel tager omkring 20 minutter på en nyere Mac; CI-matricen opdeler arbejdet parallelt og bliver færdig på få minutter.

Sådan kører du kun én kategori under fejlsøgning:

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

Se CLI-referencen for den fulde liste af flag.

Hvorfor det er vigtigt

JavaScript har subtil semantik — NaN !== NaN, -0 === 0, [1] + 1 === "11", den præcise rækkefølge for opregning af egenskaber og timingen af Promise-mikrotasks. Et bibliotek, der kører JS brugerkode, skal håndtere hver eneste af disse ting korrekt hver gang. test262 er målestokken for "korrekt"; med en beståelsesprocent på 100 % giver et JS program, der kører på V8, byteidentisk output på Phasis (bortset fra browserbaserede API'er).