Тестирование событий javascript более высокого уровня - PullRequest
10 голосов
/ 26 июля 2011

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

Если бы я упустил тот факт, что любая из вышеупомянутых библиотек поддерживает такое тестирование, мне бы понравился пример.

Редактировать


Так что я много смотрел прошлой ночью и действительно ничего не встречал.Я хотел бы, если возможно, эмулировать взаимодействие с пользователем на более высоком уровне, чем что-то вроде жасмина, который является стилем капибары, в том смысле, что он просто симулирует взаимодействие с домом.

Мне нужна библиотека, которая фактически эмулирует мышь-> перемещение мыши -> мышь вверх по цепочке событий.

Существует ли такое волшебное создание?

Редактирование поста


Итак,Я продолжал экспериментировать с библиотеками тестирования JS и действительно не доволен тем, как они функционируют, используя холст html5.Кажется, что с canvas вы не можете тестировать события в jasmine, потому что jasmine не будет инициализировать canvas.

Мне не нравится, что вы должны использовать «html» фикстуры, а не тестировать код приложения.Это кажется задом наперед, если вы пытаетесь интегрировать JS в свое приложение.Для тестирования спецификаций это имеет смысл, но BDD-тестирование веб-фреймворка потребовало бы, чтобы оно фактически использовало представления приложений для тестирования.

Опять же, существует такой монстр или моя голова в облаках?

Ответы [ 5 ]

2 голосов
/ 02 марта 2012

Я видел единственное хорошее решение этой проблемы: DOH Robot . Он запускает Java-апплет, который позволяет генерировать реальные события JavaScript и эмулировать реальное поведение пользователя (включая тестирование методом перетаскивания)

DOH не зависит от dojo, поэтому вы можете использовать его в любом проекте. К сожалению, он не очень широко используется, хотя это действительно крутая среда тестирования.

2 голосов
/ 03 августа 2011

Вы пробовали PhantomJS или ZombieJS ?В частности, я слышал много хорошего о Phantom.

=============

Еще одно предложение: плагины / макросы Selenium.www.seleniumwiki.com/selenium-rc/selenium-mousedownat-mousemoveat-and-mouseupat-example/ или glauche.de/2009/09/09/drag-drop-with-selenium/.

0 голосов
/ 30 января 2012

Я только что успешно протестировал код, который нуждался в событиях мыши, используя jasmine и jQuery.

http://api.jquery.com/category/events/event-object/

Просто создайте и запустите события, подобные этому:используйте Жасмин, чтобы проверить свойства.В качестве заметки, если вам нужно проверить анимацию, вы можете смоделировать время следующим образом:

// http://groups.google.com/group/jasmine-js/browse_thread/thread/dbdc5ad1c1514322

beforeEach(function() { 
  jasmine.Clock.useMock(); 
}); 
//... call the code that calls setTimeout 
jasmine.Clock.tick(500); // advance 500 msec 
0 голосов
/ 04 августа 2011

Иди и посмотри jQuery и Dojo.Или вы можете перейти на сайт jsfiddle и посмотреть.У них есть набор библиотек, и вы можете тестировать онлайн, не загружая библиотеки.

0 голосов
/ 31 июля 2011

Эмуляция поведения пользователя в JavaScript потребует от вас создания пользовательских Event Object s, отправки их на Element и изменения их свойств, наиболее важные из которых, однако, только для чтения в соответствии со стандартами браузеры.

В IE 5+ они кажутся изменяемыми, но это, очевидно, исключает кросс-браузерное тестирование.

Итак, я не думаю, что то, что вы имеете в виду, возможно.


Редактировать : Думая об этом (и изучая документацию для расширения Selenium Firefox), очевидно, вы сможете написать программу на JavaScript, которая в соответствии с заданным расписанием будет программно создавать пользовательские Event Object, которые имитируют поведение пользователя.

Однако я не уверен, что именно этим занимается Selenium или - что более важно - является ли это надежным способом сделать это. Aso это по существу означает "faking interaction with the DOM", что вы исключили.

Кстати, позвольте мне получить это правильно: так что вам нужна библиотека JavaScript для тестирования JavaScript-части вашего приложения; но вы также хотите, чтобы он работал на уровне браузера (а не на уровне механизма DOM), то есть имитировал подлинное взаимодействие с пользователем, как если бы оно было зафиксировано браузером?

...