2015-04-03 5 views
3

Если у вас есть угловая директива, в которой внутри шаблона есть кнопка с атрибутом ng-click, я должен проверить действие фактических действий (щелчок) или, прикрепленных к ng -click-атрибут, вызов функции?Ng-click - как модульный тест для поведения

Другими словами, для директивы, которая имеет шаблон:

<div> 
    <button ng-click="game.start()">start</button> 
</div> 

я должен проверить, что щелчок делает или что функция game.start делает?

Мне известно, что позже функция game.start может быть изменена для другой. Кроме того, можно удалить ng-click и щелкнуть событие по-другому.

Тестирование устройства с помощью triggerHandler ('click') является заманчивым, но шаблон директивы также может меняться. Это означало бы, что мне нужен «проверенный» доступ к узлам DOM, а именно через атрибуты id.

Должен ли я прикреплять атрибуты идентификаторов на узлах только для модульного тестирования, или я должен принять другой подход к проблеме?

+0

Что ж, не будет проверять, что именно щелчок делает то же самое, что и функция game.start? – Aaron

+0

Ну, да и нет. Да, пока, но скажем, что я хочу реорганизовать код позже, и моя функция game.start изменится, например, на game.init. В таких ситуациях я вынужден переписать свою тестовую спецификацию. Я просто не хочу этого делать при написании тестов на поведение. –

ответ

0

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

it("performs some action when clicked", function() { 
    element.find("button").click(); 

    assert(something); 
}); 

Вызов обработчика напрямую поможет вам прохождение теста, даже если вы забыли добавить директиву ng-click, которая не то, что я обычно хочу. Это также дает вам возможность переименовать метод обработчика без необходимости корректировать тест, делая его немного менее хрупким.

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

+0

У меня есть шаблоны, которые не слишком сложны, но все же у них есть две-три кнопки и разные узлы DOM. К сожалению, нарушение директивы в multpile - это не решение для моего проекта:/ –

+0

Тогда я бы пошел с разумными селекторами, как и при стилизации кнопок с помощью css. – user1777136

Смежные вопросы