angular - 具有受保护 @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
字段方法很愚蠢而且不是很有用?
我很感谢任何建议。
解决方案
我从未见过任何这样的例子(protected
在 an 上使用input
)。
事实上,它们应该是公开的,因为正如名字本身所说,input
应该从类外部更新。你在你的应用程序上使用 AOT 吗?如果实际上编译,我什至感到惊讶。
从您的角度来看,您在测试中更新属性将遇到同样的问题。如果您处于开发模式,那么它会使用JIT
(及时编译)并且您不会从模板中获得那种检查。这就是它可能起作用的原因。
结论:只要把你所有的input
s public
.
推荐阅读
- python - 烧瓶嵌套的休息api招摇不工作
- java - 如何在 Java 中从 PostgreSQL 转换时间间隔
- java - 在Java中计算二叉树中的叶节点
- python - 使用队列会导致 asyncio 异常“得到 Future
附加到不同的循环” - php - 更改参数顺序的 Laravel 路由中出现 404 错误
- python - CNN 使用具有显着尺寸差异的图像
- java - Java - 递归停止了,我不明白为什么
- selenium - 在 selenium Python 中查找父元素
- angular - 如何消除内部使用 combineLatest 的 Angular 7 异步验证器?
- java - selenium webdriver-this my login button tag 如何识别这种情况下使用的方法