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