Старыя нядобрыя часы
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
Кантрольны спіс пры даданні новых тэстаў
-
Новыя апартаменты павінны быць дададзены на верхні ўзровень
jstests.list, іMakefile.inфайлы ўjs/src/tests. -
Новы суб-люкс павінны быць дададзеныя да Suite узроўні
jstests.listфайл. -
Новыя выпрабаванні павінны быць пералічаны ў адпаведных суб-люкс у
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 для больш фоне.