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

时间:2018-10-24 08:45:54

标签: angular typescript unit-testing karma-jasmine concept

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

如果您的类中有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字段的方法是愚蠢的,不是很有用?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我从未见过任何示例(在protected上使用input)。

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

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

结论:只需将所有inputpublic放进去。