В IE8 это также не баг — просто в IE8 он ЕЩЕ не реализован. Я так понял что реализацию подобного функционала jQuery «лоббировали» сами.
«The jQuery project petitioned the browsers to add the new matchesSelector method (writing up a test suite, talking with vendors, and filing bugs)» (от сюда: blog.jquery.com/2010/10/16/jquery-143-released/)
Текущая версия не умеет делать асинхронные тесты. Я для этого использую различные mock'и. Уже сейчас на странице проекта есть wiki-страница описывающая методику асинхронного тестирования, но готовых бинарников пока нет, транк проекта, насколько я понимаю, сейчас не стабильный.
Есть различные сторонние варианты использования тестов QUnit (которые умеют делать асинхронность) и js-test-driver. Они описаны на wiki проекта и комментариях к ним.
1. Запускаем сервер
2. Подключаем к нему все браузеры
3. Оставляем работать навсегда
Далее…
1. Запускаем среду исполнения тестов
2. Получаем отчет об ошибках
3. При необходимости исправить ошибки и повторить с п. 1
Сервер и браузеры могут жить вечно. Тесты запускаются вами или из IDE, среда исполнения подключается к серверу, выполняет в нем тесты (во всех подключенных браузерах, сама, автоматом, браузеры больше можно не трогать), вы получаете результат.
Ему без разницы где гонять тесты. Какой браузер натравите на сервер и сделаете сapture — тот и будет гонять тесты. Можно хоть все имеющиеся подключить, и еще с других ОС удаленно тоже подключиться и на них тоже гонять.
Ошибка работы с дом моделью можете отлавливать через обычные assert*. document, window и любые производные от них (естественно) доступны в коде тестов.
+ он умеет декларативное добавление HTML на страницу прямо во время теста.
$('.some').click(function(){
// нам здесь нужен бы контекст, но хочется взять того, на ком горит событие...
this..... // <-- в таком случае как лучше поступать, как считаете?
}.bind(ctx));
Jaml.register('defaultUl', function(itemsContainer) { // Это вместо defaultUl
ul(Jaml.render(itemsContainer.desiredTamplateName, itemsConteiner.items); // Так можно заменить трансформацию.
});
Да, различие есть, нет вашей функции трансформации. Но это имхо не всегда плюс, получается очень размазанная по коду шаблонизация (один шаблон и куча разных функций трансформации). В случае JAML да, придется вместо каждой трансформации зарегистрировать свой шаблон элемента.
И да, похоже вы правы, в Chrome 7, например, баг не воспроизводится…
В IE8 это также не баг — просто в IE8 он ЕЩЕ не реализован. Я так понял что реализацию подобного функционала jQuery «лоббировали» сами.
«The jQuery project petitioned the browsers to add the new matchesSelector method (writing up a test suite, talking with vendors, and filing bugs)» (от сюда: blog.jquery.com/2010/10/16/jquery-143-released/)
Ошибки в IDE можно игнорировать, а вот то, что у тебя код не комитится — с этим уже не поспоришь =)
Для интерфейсного тестирования попробуйте Selenium.
«We've fixed several critical bugs since then. I'll let Cory know we should release an updated version.»
Есть различные сторонние варианты использования тестов QUnit (которые умеют делать асинхронность) и js-test-driver. Они описаны на wiki проекта и комментариях к ним.
1. Запускаем сервер
2. Подключаем к нему все браузеры
3. Оставляем работать навсегда
Далее…
1. Запускаем среду исполнения тестов
2. Получаем отчет об ошибках
3. При необходимости исправить ошибки и повторить с п. 1
Сервер и браузеры могут жить вечно. Тесты запускаются вами или из IDE, среда исполнения подключается к серверу, выполняет в нем тесты (во всех подключенных браузерах, сама, автоматом, браузеры больше можно не трогать), вы получаете результат.
Ошибка работы с дом моделью можете отлавливать через обычные assert*. document, window и любые производные от них (естественно) доступны в коде тестов.
+ он умеет декларативное добавление HTML на страницу прямо во время теста.
Jaml.register('table', function(personBook) {
table(
tr(th('Name'), th('Balance')),
Jaml.render('tableItem', personBook.persons);
);
});
Jaml.register('tableItem', function(person) {
tr(
{cls: person.balance<0?'red':'green', id: person.id },
td(person.name),
td(person.balance)
);
});
Jaml.render('table', personBook);
// personBook = { persons: [ Your array here ] };
Вот UL
Jaml.register('defaultUl', function(itemsContainer) { // Это вместо defaultUl
ul(Jaml.render(itemsContainer.desiredTamplateName, itemsConteiner.items); // Так можно заменить трансформацию.
});
Jaml.register('li-item', function(item) {
li({id: item.id }, item.name);
});
Jaml.render('defaultUl', { desiredTemplateName: 'li-item', items: [] );
Да, различие есть, нет вашей функции трансформации. Но это имхо не всегда плюс, получается очень размазанная по коду шаблонизация (один шаблон и куча разных функций трансформации). В случае JAML да, придется вместо каждой трансформации зарегистрировать свой шаблон элемента.