Нет возможности протестировать ngMouseenter?

Я искал документы и Google и изо всех сил пытаюсь найти надежные ссылки на то, как предполагается написать тест E2E для событий ngMouseenter. Инструменты тестирования E2E Angular имеют element(<selector>).click(), но ничего, насколько я вижу, для других типов событий.

В моем случае mouseenter (и mouseleave) запускает поведение, которое я хотел бы протестировать, и я полагаю, что у других есть аналогичные варианты использования. Есть ли способ сделать это?

[редактировать]

Я нашел расширение для запуска сценария angular здесь, на SO: /17807007#17807007">AngularJS: как вызывать обработчики событий и обнаруживать привязки в тестах

Это позволяет мне делать:

jqFunction(<selector>, "mouseenter")

и отлично работает.


person cmw    schedule 11.10.2013    source источник


Ответы (2)


На угловом github есть pull request для mouseover, который был объединен в v1.1.2 здесь. Может быть, это поможет?

В противном случае, пока вы можете инициировать событие с помощью jQuery, вы сможете сделать что-то вроде

element(<selector>).query(function(selected, done) {
    selected.trigger('mouseenter');
    done();
});

для любых пользовательских событий. Сказав это, я пробовал тестировать в плункере и, похоже, вообще не мог заставить mouseenter запускаться, независимо от того, задействован ли angular.

person Andyrooger    schedule 12.10.2013
comment
К сожалению, это решение не сработало, хотя я точно не знаю, почему. Тем не менее, я нашел здесь полезное расширение на SO, которое позволяет мне делать то, что я ищу: stackoverflow.com/questions/17575768/ - person cmw; 16.10.2013
comment
Хорошее место. Увидев это, я думаю, что понимаю, почему мой не работает, а другие, такие как ссылка, работают. Внутри моего query, selected находится объект jq из библиотеки jQuery, предоставленной внутри исполнителя сценария (в моем случае 1.8.2). Когда я запускаю событие, оно запускает обработчики, прикрепленные к кешу для этого экземпляра jQuery. Ссылка показывает, как получить экземпляр jQuery из фактического приложения (поэтому тесты привязываются к приложению немного больше) и позволяет вам запускать, как вы делали из своего собственного приложения. Я все еще немного не понимаю, почему click будет работать, а mouseenter — нет. - person Andyrooger; 16.10.2013

Директива ng-mouseenter строится на событии mouseover внутри. Чтобы активировать его, просто позвоните

yourElement.trigger('mouseover');

См. также этот вопрос

person lex82    schedule 09.11.2014