2013-10-11 5 views
1

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

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

[править]

Я нашел расширение для сценария бегуна угловых здесь на SO: AngularJS: how to invoke event handlers and detect bindings in tests

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

jqFunction(<selector>, "mouseenter")

и прекрасно работает.

ответ

1

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

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

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

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

+0

К сожалению, это решение не похоже на работу, хотя я точно не знаю, почему. Тем не менее, я нашел полезное расширение здесь на SO, что позволяет мне делать то, что я ищу: http://stackoverflow.com/questions/17575768/angularjs-how-to-invoke-event-handlers-and-detect -интеграция-в-тестах/17807007 # 17807007 – cmw

+0

Хорошее место. Увидев это, я думаю, что понимаю, почему мой не работает, а другие, такие как связанный, делают. Внутри моего 'query',' selected' есть объект jq из jQuery lib, предоставленного внутри сценария (1.8.2 в моем случае). Когда я запускаю событие на этом, он запускает обработчики, прикрепленные в кеше для этого экземпляра jQuery. Ссылка показывает, как получить экземпляр jQuery из фактического приложения (это еще больше привязывает тесты к приложению) и позволяет вам запускать, как вы делали это из собственного приложения. Я все еще немного смущен, почему 'click' будет работать, но' mouseenter' не будет, хотя. – Andyrooger

1

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

yourElement.trigger('mouseover'); 

Смотрите также this question