Общие концепции / методы модульного тестирования в JavaScript для разных браузеров? - PullRequest
5 голосов
/ 31 августа 2009

Я писал модульные тесты на строго типизированных языках, и у меня достаточно хорошее понимание этого. При написании модульных тестов на JavaScript для проверки правильности работы определенных функций в определенных браузерах я возвращаюсь к ручному тестированию. Я не понимаю, как это работает. Потому что JavaScript призван сократить разрыв между данными и презентацией и сделать его более интерактивным. И все происходит в браузерах, и это больше связано с пользовательским интерфейсом. Так что я предполагаю, что если бы я собирался написать модульный тест, я бы написал что-то вроде (в псевдокоде):

run function A
check DOM if certain element has been created
  if not then fail
check if element is visible
  if not then fail
check for the content of that element
  if null then fail
etc…

Написание этих тестов мне кажется «жестким кодированием», и чего не хватает, так это того, что тесты не смогут определить, правильно ли они были отрисованы, они выполняют только чисто функциональные тесты. Поэтому мне интересно, может ли кто-нибудь объяснить мне, каковы надлежащие процедуры тестирования в JavaScript, как сделать автоматизацию сборки и какие-то общие концепции при ее выполнении. Я просто смотрел на тестовое проект Джона Резига , но все еще не понял, о чем он. Я также читаю о QUnit на данный момент.

Я ищу некоторые вводные материалы о концепциях / практиках, которые могут меня начать. Я не ищу конкретные библиотеки или инструменты, если они не имеют хорошего представления о понятиях.

Спасибо.

Ответы [ 5 ]

4 голосов
/ 02 сентября 2009

Это определенно запутанная и динамичная область веб-разработки прямо сейчас. На мой взгляд, есть несколько важных отличительных особенностей 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, в котором присутствует пара элементов. Надеюсь, это поможет!

2 голосов
/ 01 сентября 2009

Проверьте jsTestDriver. Я думаю, что это один из лучших:

Цель JsTestDriver - создать JavaScript тестовый бегун, который:

легко интегрируется с непрерывным строит системы и позволяет запускать тесты на нескольких браузерах быстро облегчить разработку стиля TDD.

http://code.google.com/p/js-test-driver/

1 голос
/ 31 августа 2009

Возможно, вы захотите использовать шаблон презентатора для своего JavaScript и просто использовать простые модульные тесты. Блог тестирования Google имеет несколько приличных ресурсов.

Я бы начал здесь:

http://googletesting.blogspot.com/2009/02/with-all-sport-drug-scandals-of-late.html

Я сделал это в проектах Flex (ActionScript) для всего своего кода пользовательского интерфейса и обнаружил, что он работает очень хорошо. Вы хотите изолировать свою функциональность, чтобы избежать тестирования вещей, которые уже были тщательно протестированы поставщиками браузеров.

0 голосов
/ 31 августа 2009

Вы можете попробовать использовать Тест Рой

0 голосов
/ 31 августа 2009

Я иногда слышу о Селене . Я никогда не использовал это, но, возможно, это могло бы помочь вам.

Selenium Remote Control (RC) управляет вашим тесты в нескольких браузерах и платформ. Настройте свои тесты в своем предпочитаемый язык.

Я также нашел статью в блоге: Юнит-тестирование в JavaScript , в которой упоминается так: В поисках лучшего инструмента для юнит-тестирования JavaScript .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...