Angular 具有受保护的@Input 字段的单元测试组件

Angular unit-testing components with protected @Input fields

我们习惯于使变量 protected 仅在组件及其子 class 中使用,而不在模板中使用。

如果您的 class 中有 10 个变量,并且使用 protected privatepublic 时,这尤其有利,很容易知道使用了哪些变量在模板中。

@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 字段的方法是愚蠢的并且不是很有用?

感谢您的建议。

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

事实上,它们应该是 public,因为顾名思义,input 应该从 class 之外更新。你在你的应用程序上使用 AOT 吗?如果真的能编译,我什至会感到惊讶。

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

结论:把你所有的inputs public.