İçeriğe geç

test262 kapsamı

test262, TC39 tarafından sürdürülen resmi uygunluk test paketidir ve JavaScript altyapılarını karşılaştırmanın standart yoludur.

Phasis, her kategoride paketin tamamını 100 % oranında geçer — dil semantiği, standart kütüphane, Intl, annexB eski web özellikleri, kuluçkadaki testlerin staging dizini ve test düzeneğinin kendi testleri. Özellik bayrağı atlatması, ana makine boşluğu izin listesi girdisi veya parça başına istisna yoktur.

Test paketi sabitlenmiştir: test262 git alt modülü, Phasis'ın hangi revizyona göre ölçüldüğünü belirler ve yeni üst kaynak testleri yalnızca alt modül güncellendiğinde hesaba katılır. COMPAT.md içindeki tüm test paketi anlık görüntüsü, her gönderimde değil elle başlatılan compat-matrix.yml iş akışıyla yeniden oluşturulur; COMPAT.md, anlık görüntünün ne zaman alındığını ve hangi işleme göre alındığını kaydeder.

Karşılaştırma için, test262.fyi aynı test paketini tüm üretim JS altyapılarında izler:

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

Bu altyapıların her birinde küçük bir uyumsuzluk payı kalır (yeni eklenen öneriler, geliştirilmekte olan nadir uç durumlar). Phasis, tek amaca odaklı ve uygunluğu önceleyen bir uygulama olduğu için bu farkı kapatır.

Yerel olarak çalıştırma

Çalıştırıcı, test262 alt modülünü ve deponun test sınıflarını gerektirir; bunların ikisi de Composer paketinde bulunmadığından bir kopyadan çalıştırın:

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

Yakın tarihli bir Mac'te tüm çalıştırma yaklaşık 20 dakika sürer; CI matrisi işleri paralel parçalara böler ve tek haneli dakikalarda tamamlar.

Hata ayıklarken yalnızca bir kategoriyi çalıştırmak için:

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

Tüm bayrakların listesi için CLI başvuru kaynağı bölümüne bakın.

Bunun önemi

JavaScript'ın incelikli semantiği vardır — NaN !== NaN, -0 === 0, [1] + 1 === "11", özelliklerin numaralandırılma sırasının tam olarak nasıl olduğu ve Promise mikro görevlerinin zamanlaması. Kullanıcı kodunu JS çalıştıran bir kütüphanenin bunların her birini her seferinde doğru ele alması gerekir. "Doğru" ölçütü test262'dır; bunu 100 % oranında geçmek, V8 üzerinde çalışan bir JS programının, tarayıcıya özgü API'ler hariç, Phasis üzerinde bayt düzeyinde aynı çıktıyı üretmesi demektir.