Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var _done = function(obj) {
/** update time in root */
root.time = new Date().getTime() - root.time;
/** display root */
// console.dir(root);
_printConsole(root);
}
на var _done = function(obj) {
/** update time in root */
root.time = new Date().getTime() - root.time;
/** display root */
// console.dir(root);
_printWhereEverYouWant(root);
}
Предварительно конечно написав метод _printWhereEverYouWant(root); — и наслаждайтесь результатом.Говорят ещё Safari, но у меня нету устройств Apple для проверки
test.it(some).comment('my comment');
if (test.it(something)) { doSomething(); }
test.it(something).comment('my comment');
именно по этому не описывал в статье идею с if (test.it())
test.it(something, callback_if_true, callback_if_false [, callback_finally]).comment('comment for true', 'comment for false')
switch (arguments.length) {
/** in case of no arguments - throw Reference error */
case 0 : { ... } break;
/** if there only one argument - test it for truth */
case 1 : { ... } break;
/** if there are two arguments - test equalence between them */
case 2 : { ... } break;
в test.it. возможно просто реализую это в отдельном методе, test.withCallback например.test.it(some)
.callback(function(){ ... },function(){ ... })
.comment('sometext');
test.it(some).callback(function(){ ... },function(){ ... })
Тут коллбек выбирает функцию для исполнения, основываясь на результате теста.// результат
test.it('single').comment('comment').result(); // -> true
test.it('first','second').comment('comment').result(); // -> false
// аргументы
test.it('single').comment('comment').arguments(); // -> 'single'
test.it('first','second').comment('comment').arguments(); // -> ['first','second']
test.group(groupname, fun)
можно бы было передавать контекст исполнения функции fun
.var testObject = TestFactory->create(testName, parentGroupName | null);
var Me = {name:'Titulus',lastName:'Desiderio'};
testObject
->test(Me, 'Я существую?')
->test(OtherObject);
Me.habr = 'Хабрахабр!';
testObject->test(Me.habr, 'Хабр?');
var testObject = TestFactory->getTest(testName);
testObject->test(Obj, 'Возможно здесь тест пройдет');
testObject->test
testObject->test(Me.habr, 'Хабр?');
этоtestObject.test(Me.habr, 'Хабр?');
testObject = TestFactory.create(testName, parentGroupName | null);
если в библиотеке и так естьwindow.test = new testit();
var testObject = TestFactory.create(testName, parentGroupName | null);
var Me = {name:'Titulus',lastName:'Desiderio'};
testObject
.test(Me, 'Я существую?')
.test(OtherObject);
Me.habr = 'Хабрахабр!';
testObject.test(Me.habr, 'Хабр?');
идея в том что бы переименовать конструктор testit в TestFactory, метод it в test, отдать создание объекта test пользователю, и переписать всё на PHP?
// TestFactory - глобальный объект, хранит в себе всю логику и все вызовы тестов
var testGroup = TestFactory.create(groupName, parentGroupName | null); // Создает новую группу тестов. Она может быть корневой или дочерней
// Далее идут тесты в группе
// Тесты в эту группу могут попасть и из других участков кода при необходимости
testGroup
.test(Me, 'Я существую?')
.test(OtherObject);
testGroup.test(Me.habr, 'Хабр?');
// Другой пример использования
var testGroup = TestFactory.get(groupName); // Получаем группу по имени
testObject.test(Obj, 'Возможно здесь тест пройдет'); // Добавляем тест в существующую группу
test.group('groupName',function(){ ... }) // Первый вызов группы groupName
test.it(...);
test.group('groupName',function(){ ... }) // Второй вызов группы groupName
То есть группы с одинаковыми groupName будут объединяться в одну.var testGroup = TestFactory.get(groupName);
testObject.test(h.a.b.r, 'Возможно здесь тест пройдет');
var testGroup = TestFactory.get('core_tests');
var testGroup = TestFactory.getOrCreate(groupName); // Будет получена существующая группа или создана новая корневая
testGroup.test(h.a.b.r, 'Возможно здесь тест пройдет');
var testGroup = TestFactory.get(groupName);
if (testGroup) {
testGroup.test(h.a.b.r, 'Возможно здесь тест пройдет');
}
test.group('groupName',function(){ ... }) // Первый вызов группы groupName
// Тут много много кода
test.it(...); // Как понять и не запутаться, в какую группу попадет этот тест?
Как понять и не запутаться, в какую группу попадет этот тест?
function myFunction(){ ... }) // Вызов функции
// Тут много много кода
var myVar = 10; // Как понять и не запутаться, где находится переменная myVar, в области видимости функции или в глобальной.
if (testGroup) {
testGroup.test(h.a.b.r, 'Возможно здесь тест пройдет');
}
var testGroup = TestFactory.getOrCreate(groupName1);
testGroup.test(some[0]);
testGroup.test(some[1]);
// код
var testGroup = TestFactory.getOrCreate(groupName2); // переопределяем testGroup
// ещё код
testGroup.test(some[3]);
В этой ситуации, если применять одну и ту же переменную, как буфферный testGroup, можно не заметить её переопределение и запутаться в тестах. А если использоватья каждый раз новую переменную с другим названием, то зачем разработчику придумывать два разных названия для идентификации одного и того же объекта? Есть и третий вариант, использовать разные названия, для разных переменных, но совпадающие с названиями группvar groupName1= TestFactory.getOrCreate('groupName1'); // определяем первую группу
var groupName2= TestFactory.getOrCreate('groupName2'); // определяем вторую группу
Но вот тут встаёт вопрос о сахаре — зачем нам в двух местах писать одно и то же?
test.it — тестирование JavaScript или мой велосипед с вложенностью и подробным выводом