Ugrás a tartalomhoz

test262 lefedettsége

A test262 a TC39 által fenntartott hivatalos megfelelőségi tesztcsomag és az JavaScript motorok összehasonlításának szabványos módja.

A(z) Phasis a teljes tesztcsomag 100%-át teljesíti minden kategóriában — a nyelvi szemantikát, a szabványos könyvtárat, az Intl elemet, az annexB örökölt webes funkciókat, a kísérleti teszteket tartalmazó staging könyvtárat és a tesztkeretrendszer önellenőrzéseit is beleértve. Nincsenek megkerülések funkciójelzőkkel, tiltólistás gazdagéphiányok vagy kihagyott tesztfelosztások.

A tesztcsomag rögzített: a(z) test262 Git-almodul meghatározza a(z) Phasis mérésének alapjául szolgáló revíziót, és az új, upstream tesztek csak az almodul frissítése után számítanak. A teljes tesztcsomag pillanatképe a COMPAT.md helyen található, és a(z) compat-matrix.yml munkafolyamat készíti újra; ezt kézzel indítják, nem minden push után. A(z) COMPAT.md rögzíti, mikor készült a pillanatkép, és melyik commit ellenőrizte.

Összehasonlításképpen a test262.fyi ugyanezt a tesztcsomagot követi nyomon minden éles JS motor esetében:

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

Ezekben a motorokban kisebb fennmaradó hiányok vannak (újonnan bevezetett javaslatok, fejlesztés alatt álló ritka szélső esetek). A(z) Phasis azért szünteti meg ezeket a hiányokat, mert kifejezetten a specifikációnak való megfelelésre összpontosít.

Helyi futtatás

A futtatóhoz szükség van a(z) test262 almodulra és a tároló tesztosztályaira; ezek egyike sem része a(z) Composer csomagnak, ezért klónból futtassa:

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

Egy teljes futtatás egy újabb Macen körülbelül 20 percet vesz igénybe; a CI-mátrix párhuzamosan osztja fel a feladatokat, így néhány perc alatt végez.

Hibakereséskor egyetlen kategória futtatásához:

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

A kapcsolók teljes listáját lásd a CLI dokumentációjában.

Miért fontos ez

JavaScript finom szemantikával rendelkezik — NaN !== NaN, -0 === 0, [1] + 1 === "11", a tulajdonságok felsorolásának pontos sorrendje és a Promise mikrotaszkok időzítése. Egy könyvtárnak, amely JS felhasználói kódot futtat, mindezt minden alkalommal helyesen kell kezelnie. A „helyes” mércéje a test262; ha ez 100%-ban sikeres, akkor egy JS program, amely V8 alatt fut, bájtról bájtra azonos kimenetet ad Phasis alatt (a csak böngészőben elérhető API-kat nem számítva).