Тестирование директив атрибутов¶
28.02.2022
Директива атрибута изменяет поведение элемента, компонента или другой директивы. Ее название отражает способ применения директивы: в качестве атрибута на главном элементе.
Если вы хотите поэкспериментировать с приложением, которое описано в этом руководстве, запустите его в браузере или скачайте и запустите его локально.
Тестирование HighlightDirective
¶
В примере приложения HighlightDirective
устанавливает цвет фона элемента на основе либо связанного с данными цвета, либо цвета по умолчанию (lightgray). Он также устанавливает пользовательское свойство элемента (customProperty
) в true
без какой-либо причины, кроме как для того, чтобы показать, что это возможно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
Она используется во всем приложении, возможно, наиболее просто в AboutComponent
:
1 2 3 4 5 6 7 8 9 |
|
Тестирование конкретного использования HighlightDirective
в AboutComponent
требует только техник, рассмотренных в разделе "Тесты вложенных компонентов" раздела Сценарии тестирования компонентов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Однако тестирование одного варианта использования вряд ли позволит изучить весь спектр возможностей директивы. Поиск и тестирование всех компонентов, использующих директиву, утомителен, сложен и почти так же маловероятен для полного охвата.
Тесты только для классов могут быть полезны, но директивы атрибутов, подобные этой, обычно манипулируют DOM. Изолированные модульные тесты не касаются DOM и, следовательно, не внушают уверенности в эффективности директивы.
Лучшим решением будет создание искусственного тестового компонента, который демонстрирует все способы применения директивы.
1 2 3 4 5 6 7 8 9 10 11 |
|
Случай <input>
связывает директиву HighlightDirective
с именем значения цвета в поле ввода. Начальным значением является слово "cyan", которое должно быть фоновым цветом поля ввода.
Вот несколько тестов этого компонента:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
Несколько приемов заслуживают внимания:
-
Предикат
By.directive
— отличный способ получить элементы, имеющие эту директиву, когда типы их элементов неизвестны. -
Псевдокласс
:not
вBy.css('h2:not([highlight])')
помогает найти<h2>
элементы, которые не имеют директивы.By.css('*:not([highlight])')
находит любой элемент, у которого нет директивы. -
DebugElement.styles
позволяет получить доступ к стилям элементов даже в отсутствие реального браузера, благодаря абстракцииDebugElement
.Но не стесняйтесь использовать
nativeElement
, если это кажется проще или понятнее, чем абстракция. -
Angular добавляет директиву в инжектор элемента, к которому она применяется.
Тест на цвет по умолчанию использует инжектор второго
<h2>
для получения его экземпляраHighlightDirective
и егоdefaultColor
. -
DebugElement.properties
предоставляет доступ к искусственному пользовательскому свойству, которое задается директивой