Как проверить шаблон HTML в приложениях Angular?

Я пишу модульный тест кармы / жасмина для приложения Angular. Идея состоит в том, чтобы проверить, что шаблон HTML действителен.

Допустим, простой компонент «my-comp». И предположим, я бы использовал следующий HTML-шаблон, который вызывает несуществующее свойство:

<my-comp [noop] = "dummy"></my-comp>

Во время выполнения приложения я получал ошибку синтаксического анализа шаблона:

Can't bind to 'noop' since it isn't a known property of 'my-comp'.

Теперь я хотел бы проверить это во время тестов. Однако модульный тест проходит, и компонент инициализируется.

Есть ли способ обнаружить такую ​​ошибку в тестах?

Когда вы говорите, что компонент инициализируется, вы выполнили fixture.detectChanges ()? Я спрашиваю, потому что это будет пытаться фактически создать компонент в DOM и в этот момент должно дать вам ту же ошибку в тесте.

dmcgrandle 21.11.2018 06:48

Да, detectChanges называется. Кроме того, компонент выводит данные в журнал.

Heiner Lamprecht 21.11.2018 09:04
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
47
1

Ответы 1

Это нормально для компонента Angular и теста.

В вашем случае [noop]=dummy не будет работать, если вы не предоставите @Input()noop для компонента. Такого свойства не существует, поэтому компиляция завершится ошибкой.

Однако во время теста, когда вы

line1  const fixture = TestBed.createComponent(MyComponent);
line2  const component = fixture.componentInstance; 

Это сгенерирует компонент на основе вашего определения в вашем component.ts Следовательно, вы не увидите никаких сбоев.

Если в вашем VS-проекте установлен линтер, вы заметите, что если вы добавите: component.noop после строки2, в вашем тестовом файле будет ошибка, так как это свойство не существует в вашем компоненте.

Что ж, добавлять в тест component.noop смысла нет. Очевидно, что это не удастся. Дело в том, что я хочу, чтобы тест подтвердил, что все шаблоны в приложении верны и не используют несуществующие свойства. Это необходимо, потому что разработчики могут ошибаться в именах или во время рефакторинга не все места найдены и исправлены. В любом случае, сборка приложения с -aot также сообщает обо всех этих ошибках.

Heiner Lamprecht 21.11.2018 09:05

В этом случае служба build / ng завершится ошибкой, как и в случаях, когда вы используете компонент bootrap, сообщающий разработчику, что такого связанного свойства нет (если они передают несуществующее свойство). Чтобы передать все необходимые свойства, вы обычно должны иметь значение по умолчанию для вашего showstopper @Input и APi, чтобы объяснить, что они делают. Обычно они находятся внутри компонента. Config.ts. Вы можете ознакомиться с некоторыми спецификациями на github.com/ng-bootstrap/ng-bootstrap/blob/master/src/popover‌ /…

dream88 21.11.2018 09:53

Другие вопросы по теме