angular - 如何模拟一个类,它是Angular Jasmine中其他类的扩展
问题描述
假设我有一个像下面这样的课程,
Class MyClass{
protected id: number;
protected name: string;
protected x:...
protected y:...
// it has many properties, assume 100 other properties
setId(id:string){
this.id = id;
}
getId(){
return this.id;
}
// get/set is applicable to all properties
}
然后,
我有一些课
class SomeClass extends MyClass{
dimension: number;
// assume it has its own definition and implementation
}
在 .ts 文件的某个地方,我使用了一个类似的函数
calculation(myClassObject: SomeClass){
...
...
}
我想对calculation
函数进行单元测试所以我显然想模拟 SomeClass 但我不模拟它而是直接使用该类本身。
let someClass:SomeClass = new SomeClass();
someClass.dimension = 12;
在我的 .spec.ts 文件中的某处,
component.calculation(someClass); // someClass is not compitable.
由于 SomeClass 扩展了 MyClass 进一步具有 100 个字段,因此它会引发错误,例如缺少属性。我明白为什么,但问题是我不能定义所有这 100 个字段。有没有最简单的方法来处理它。
或者
我怎么能嘲笑SomeClass
?
解决方案
来自ng-mocks 的MockService可用于:
const someClass = MockService(SomeClass, {
dimension: 12,
});
// someClass is an instance of SomeClass
// but all its methods are dummy functions.
component.calculation(someClass);
推荐阅读
- python - 使用pyttsx的python文本到语音不在客户端播放声音
- r - 如何防止 shinyapps.io 缓存?
- google-apps-script - 使用 Google 脚本在 Google 表单上的块中随机播放项目
- xlwings - 将文本分配给轴标题(xlwings)
- javascript - 更新一,不存在则插入,仅在条件为真时修改 MongoDB
- spring-boot - 响应式 Spring Boot WebFlux 应用程序的 NGINX 设置
- regex - Java 正则表达式 - 替换表达式直到单词边界
- sparql - SPARQL 删除查询
- spring-boot - 如何在 Spring Cloud Data Flow 中获取重新启动作业的执行 ID
- minecraft - YAML 为 YAML Lint 中的文件提供错误