Компоненты углового модульного тестирования с защищенными полями @Input - PullRequest
0 голосов
/ 24 октября 2018

Мы привыкли создавать переменные protected, которые используются только в компоненте и его подклассах, но не в шаблоне.

Это особенно полезно, если в вашем классе 10 переменных, а с protected private и public очень легко узнать, какие переменные используются в шаблоне.

@Input() public disablePlus: boolean = false;
@Input() public disableMinus: boolean = false;

@Input() protected jumpSize: number = 1000;

Теперь я собираюсь создать тестовый модуль для этого компонента.Но я не могу активно изменить эти значения внутри моего it метода:

it('should change jumpSize to 5000', () => {
    component.jumpSize= 5000; 
    // ts2445: Property `jumpSize` is protected and only accessible within class and its subclasses
    ...
});

it('plus should be disabled', () => {
    component.disablePlus= true; // no error
    ...
});

Есть ли способ оставить jumpSize protected или мы должны изменить его на public?

Или вы думаете, что наш подход с protected @Input полями в любом случае глуп и не очень полезен?

Я благодарен за любой совет.

1 Ответ

0 голосов
/ 24 октября 2018

Я никогда не видел такого примера (используя protected на input).

На самом деле, они должны быть публичными, потому что, как говорит само название, input долженобновляться вне класса.Вы используете AOT в своем приложении?Я даже удивлюсь, если эта компиляция на самом деле.

И с вашей точки зрения Angular, это будет та же проблема, что и у вас в тесте по обновлению свойства.Если вы находитесь в режиме разработки, то он использует JIT (только во время компиляции), и вы не получаете такого рода проверки из шаблона.Вот почему это может работать.

Вывод: просто положите все свои input s public.

...