首页 > 解决方案 > 具有受保护 @Input 字段的 Angular 单元测试组件

问题描述

我们习惯于制作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
    ...
});

有没有办法离开 jumpSizeprotected还是我们必须将其更改为public

或者您是否认为我们的protected @Input字段方法很愚蠢而且不是很有用?

我很感谢任何建议。

标签: angulartypescriptunit-testingkarma-jasmineconcept

解决方案


我从未见过任何这样的例子(protected在 an 上使用input)。

事实上,它们应该是公开的,因为正如名字本身所说,input应该从类外部更新。你在你的应用程序上使用 AOT 吗?如果实际上编译,我什至感到惊讶。

从您的角度来看,您在测试中更新属性将遇到同样的问题。如果您处于开发模式,那么它会使用JIT(及时编译)并且您不会从模板中获得那种检查。这就是它可能起作用的原因。

结论:只要把你所有的inputs public.


推荐阅读