首页 > 解决方案 > 如何模拟一个类,它是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

标签: angularunit-testingjasminekarma-jasmine

解决方案


来自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);

推荐阅读