Back to site

JavaScript Reftests

Старыя нядобрыя часы

JavaScript Тэсты былі чырвоныя узначальваў прыёмным Mozilla тэставанне на працягу некаторага часу. Па крайняй меры, некаторыя з прычын:

  • Выпрабаванні даты папярэдняга Mozilla дзён і не прытрымліваюцца стылю любога з іншых тэстаў.

  • Выпрабаванні першапачаткова былі прызначаны для запуску толькі ў абалонку JavaScript і меў магчымасць быць запушчаны ў браўзэры прыфастрыгоўваць да іх, як дрэнна toupe

  • Не ўсе тэсты праходзяць і адсочвання вядомых няўдач было шмат часу і схільна памылак задачай.

  • Не маючы добры спосаб адсочвання збояў, за выключэннем працяглых выпрабаванняў або выключэннем выпрабаванняў, які пацярпеў катастрофу браўзэра прывяло да недапушчальным раз балатавацца на распрацоўнікаў у выніку чаго разрыў у тэставанні распрацоўшчыкі маглі выконваць да праверкі ў змены ў рухавік JavaScript.

  • Аўтаматызацыі выкарыстоўваецца для запуску тэстаў у абалонцы і браўзэра, не падыходзіць для працуючых на tinderboxes. У выніку, рухавік JavaScript не скарыстацца неадкладна, крос-платформавы тэсціравання для кожнага прыезду, але замест гэтага прыйшлося чакаць на мяне, каб выявіць рэгрэсіі і файл памылак.

  • Выпрабаванні не былі прызначана для кожнай галіны, але замест гэтага падтрымліваюцца аднолькава па ўсёй галіны. Як рухавік JavaScript развівалася, адрозненні паміж перадачай паводзін на галінах было праблематычна.

  • Адзін чалавек адказвае за даданне новых тэстаў выклікае даданне новых тэстаў, каб ўсё больш адстае ад новых патчаў.

Усё гэта прыйшло да канца, таму што ...

Good Times прыехалі!

(Па крайняй меры для браўзэра на TraceMonkey)

Дэвід Барон reftest рамках забяспечвае вырашэнне многіх праблем Bad дзён. Ён забяспечвае:

  • Знаёмы тэст выкліку.

  • Адносна хуткае час запуску ў параўнанні са старым сізіфаву-браўзэр JavaScript выпрабаванняў.

  • Reftest праяўляецца стыль забяспечваюць выдатнае сродак адсочвання састарэлых выпрабаванні, выпрабаванні няўдачамі, выпрабаванні, якія займаюць занадта шмат часу, каб запусціць або выпрабаванні, якія аварыі

  • Лёгкі (спадзяюся) інтэграцыі ў аўтаматызаваныя тэсты, якія працуюць на Tinderbox дзякуючы выкарыстанню ж падыходы, якія выкарыстоўваюцца для запуску макета reftests

У цяперашні час толькі jsreftests браўзэры рэалізаваныя. Той жа падыход плануецца ажыццявіць для абалонкі выпрабаванняў.

Запуск браўзэра JavaScript reftests

Запуск jsreftests ў браўзэр знаёмыя кожнаму, хто мае запусціць макет reftests або краш-тэстаў. Проста выклічце make у каталогу аб'екта з мэтавай jstestbrowser .


$ make -C $(OBJDIR) jstestbrowser

Гэта выконвае наступную каманду.


$ python $(OBJDIR)/_tests/reftest/runreftest.py \
       --extra-profile-file=js/src/tests/user.js js/src/tests/jstests.list

user.js файл дадаецца ў запусціць профілю часу, каб дазволіць UniveralXPConnect і іншыя льготы, неабходныя для запуску JavaScript выпрабаванняў. Вы можаце наладзіць user.js ўсталяваць іншыя наладкі вы хочаце.

Вы можаце бачыць, напрыклад часопісы тут:

Вам больш не давядзецца выконваць базавых працуе для вызначэння вядомых няўдач да тэставання патчаў. Калі jsreftests выканалі да канца, без збояў і без стварэння любых UNEXPECTED вынікаў, ваш патч добра ісці.

jsreftest выяўляецца

jstests.list з'яўляецца reftest файла маніфеста казала Test Runner, якія тэсты для выканання. jstests.list будзе выкарыстоўвацца як для абалонкі JavaScript выпрабаванняў і выпрабаванняў браўзэры JavaScript. URL-прэфіксам, новая функцыя для reftest выяўляецца, выкарыстоўваецца, каб забяспечыць адзіны файл маніфеста для абалонкі і браўзэра выпрабаванняў.

Файлы маніфеста арганізаваны ў іерархіі 3-ўзроўню.

Лепшыя файлы маніфеста узроўні жыць у js/src/tests/ . Яны ўключаюць у сябе індывідуальныя рашэнні праз include выяўляюцца ключавыя словы . Кожны раз, калі новы пакет дадаецца, топ файлы маніфеста узроўні павінны быць абноўлены, каб уключыць яго. Новыя апартаменты таксама павінны быць пералічаныя ў js/src/tests/Makefile.in для таго, каб ісці ў камплекце з іншымі тэстамі.

Другі файлы маніфеста ўзроўню ўтрымліваюцца ў набор каталогаў. Яны таксама ўключаюць суб-люкс з дапамогай include выяўляюцца ключавыя словы. Кожны раз, калі новы суб-люкс дадаецца ў набор, файлы маніфеста Suite павінна быць абноўленая ўключыць яго.

Трэці і апошні файлы узроўні выяўляюцца ўтрымліваюцца ў суб-набор каталогаў. Гэтыя файлы маніфеста спіс кожнага выпрабаванні з выкарыстаннем script manifest keyword . Гэта ключавое слова гаворыць Test Runner для атрымання фактычных вынікаў тэсту з масіва, вяртаецца getTestCases() функцыі ў TestCase. Для таго, каб вынікі тэставання быць правільна запісаны ў масіў вынікаў выпрабаванняў выпадку, вы павінны выкарыстоўваць адзін з стандартных функцый справаздачнасці, такія як reportCompare() , reportMatch() і т. д., для запісу выніку тэсту. Калі вы не выкарыстоўваеце reportCompare() або аднаго з яго стрыечных братоў, ваш тэст не будзе выканана, паведамленне, што няма вынікаў выпрабаванняў паведамляецца.

Першы радок файла маніфеста утрымлівае "URL-прэфікс", якая распавядае reftest пашырэнне прэфікс кожнага тэставага файла з URL-значэнне прэфікса перад тым, каб загрузіць яго. Абалонкі тэст-пілота будзе ігнараваць URL-прэфіксам, што дазваляе адной файла маніфэсту, якія будуць выкарыстоўвацца як абалонка і браўзэра. Астатняя частка маніфеста спісы кожнага тэставага файла папярэднічае script ключавое слова.

Напрыклад, js/src/tests/ecma_5/Date/jstests.list:

url-prefix ../../jsreftest.html?test=ecma_5/Date/
script 15.9.4.2.js

Сапраўды цікавая рэч аб reftest файлы маніфеста з'яўляюцца іх здольнасць даваць выпрабаванняў адмову тыпу . Кожны тэст можа быць пазначаныя як:

не ўдаецца

Тэсты, адзначаныя fails будуць выкананыя, а будуць пазначаныя як TEST-KNOWN-FAIL , калі яны церпяць няўдачу. Аднак, калі яны праходзяць, яны будуць пазначаныя як TEST-UNEXPECTED-PASS .

выпадковыя

Тэсты, адзначаныя random будзе выкананы і будзе пазначаны як TEST-KNOWN-FAIL(EXPECTED RANDOM) , калі яны не ці TEST-PASS(EXPECTED RANDOM) , калі яны праходзяць. Гэта карысна для выпрабаванняў, якія не могуць надзейна даклад тэст няўдачу, але якія вы хочаце працягваць выконваць у выпадку, калі яны могуць знайсці рэгрэсіі праз аварыі або сцвярджэнне.

random вынікі выкарыстоўваюцца таксама ў выпадку, калі тэст, які вяртае некалькі вынікаў выпрабаванняў адзначаны збой тыпу fails . У гэтым выпадку няўдачы адзначаны TEST-KNOWN-FAIL у той час як поспехі, адзначаныя TEST-PASS(EXPECTED RANDOM) . Гэта неабходна, так як гэта не магчыма, каб адзначыць індывідуальны тэст выпадку вынікі ў тэсце мульты-вынік, альбо перадачай або няўдачу.

не паказваць

Тэсты, адзначаныя skip не будзе выконвацца на ўсіх. skip могуць быць выкарыстаны для састарэлых выпрабаванняў, для выпрабаванняў, якія, як вядома, крах браўзэра, тэсты, якія не спыняць або выпрабаванні, якія займаюць занадта шмат часу.

Яшчэ больш рэч аб reftest файлы маніфеста з'яўляюцца іх здольнасць прымаць няўдачы тыпаў ўмоўна. Гэтыя сродкі, якія можна ўмоўна знак выпрабаванняў ці як не павінны быць прапушчаны ў залежнасці ад тыпу пабудовы (як вы правяраеце Уваход у зборка), аперацыйнай сістэмы, ці нават тып працэсара. Зменных, якія могуць быць выкарыстаны ў адмова тыпу умоўнага апісаны ў reftest пясочніцы рэалізацыі . Вы таксама можаце знайсці прыклады ў дрэва.

Вы можаце прачытаць больш пра reftest выяўляецца ў reftest README.txt

Кантрольны спіс пры даданні новых тэстаў

  1. Новыя апартаменты павінны быць дададзены на верхні ўзровень jstests.list, і Makefile.in файлы ў js/src/tests.

  2. Новы суб-люкс павінны быць дададзеныя да Suite узроўні jstests.list файл.

  3. Новыя выпрабаванні павінны быць пералічаны ў адпаведных суб-люкс у jstests.list файл. Кожны суб-люкс у jstests.list маніфеста павінна пачынацца з URL-прэфіксам.

    url-prefix ../../jsreftest.html?test=suitedir/subsuitedir/

    Тэсты павінны выклікаць reportCompare() function (or its cousins) для запісу вынікаў выпрабаванняў.

Абноўлена 26 верасня 2009 г.

Арыгінальны патч быў быць адмовіўся з-за збояў у абалонцы SpiderMonkey. Як вынік, JS / выпрабаванні былі перанесеныя на JS / SRC / тэсты, каб спрыяць іх інтэграцыі ў сістэмы зборкі. Быў некалькі знізіліся таксама аб двух розных файлаў маніфеста патрабуецца арыгінальны дызайн. Пры змене reftest.js каб дазволіць выкарыстанне URL-прэфіксам, браўзэр канкрэтных маніфеста было спынена.

Глядзіце памылка 469718 для больш фоне.

Popular Links
Published (Last edited): Apr 2 , source: http://bclary.com/blog/2009/09/10/browser-javascript-reftests/