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:
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:
./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).