Это определенно запутанная и динамичная область веб-разработки прямо сейчас. На мой взгляд, есть несколько важных отличительных особенностей JS-тестирования:
- чистые модульные тесты, которые тестируют простой код Javascript. Вы можете утверждать, что
a+b=3
или что-то еще. У нас было только несколько проблем, которые вписываются в эту категорию. При обсуждении вариантов, существует множество альтернатив JSUnit (порт JUnit). Они делятся на TDD и BDD и выбирают имена в этих категориях.
- Javascript + DOM тесты. Большая часть кода, написанного в наши дни, посвящена манипулированию DOM. например.
assertEqual('<a><div /></a>', $('div').wrap('a'));
Для JS-тестирования на основе DOM вам необходимо либо перейти к тестированию в браузере, либо использовать библиотеку, например env.js.
- Есть также насмешки и уколы (дым), асинхронные и другие помощники
Тесты могут выполняться в двух местах:
- тестирование вне браузера (обычно оно выполняется быстрее, поэтому его можно использовать в среде TDD)
- тестирование в браузере (медленнее, сложнее, но обеспечивает более точные результаты кросс-браузерного тестирования)
Selenium работает в браузере, поэтому отлично подходит для интеграционных тестов. Если у вас больше ничего не работает, это хорошая отправная точка. Он существует уже несколько лет и поддерживает большинство популярных браузеров и языков. Просмотр такой передачи может быть полезным. И эта документация может дать вам представление о том, как будут выглядеть тесты. Существует также немало других учебных пособий и скринкастов, но многие из них увязли в технической привлекательности, которая вас не волнует, поэтому вы должны быть осторожны.
Наконец, вот пример из blue ridge , который представляет собой набор инструментов, собранных вместе для тестирования вне браузера (и ручного тестирования в браузере) для Rails:
Screw.Unit(function() {
describe("Your application javascript", function() {
it("accesses the DOM from fixtures/application.html", function() {
expect($$('.select_me').length).to(equal, 2);
});
});
});
Это одиночный тест, использующий тест на синтаксис, похожий на rspec, в котором присутствует пара элементов. Надеюсь, это поможет!