Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing Jasmine单元测试抽象类_Unit Testing_Angular_Jasmine - Fatal编程技术网

Unit testing Jasmine单元测试抽象类

Unit testing Jasmine单元测试抽象类,unit-testing,angular,jasmine,Unit Testing,Angular,Jasmine,有没有办法为抽象组件创建jasmine单元测试 做 const fixture = TestBed.createComponent(MyAbstractComponent); 表示“无法将抽象构造函数类型分配给非抽象构造函数类型” 我试着搜索了一下,但什么也没找到 您可以在测试文件中创建一个简单的类,该类从抽象类扩展而来(不要忘记模拟抽象方法),而不仅仅是测试其非抽象方法。假设我们有MyAbstractClass: export abstract class MyAbstractClass {

有没有办法为抽象组件创建jasmine单元测试

const fixture = TestBed.createComponent(MyAbstractComponent);
表示“无法将抽象构造函数类型分配给非抽象构造函数类型”


我试着搜索了一下,但什么也没找到

您可以在测试文件中创建一个简单的类,该类从抽象类扩展而来(不要忘记模拟抽象方法),而不仅仅是测试其非抽象方法。假设我们有
MyAbstractClass

export abstract class MyAbstractClass {
  sum(a: number, b: number): number {
    return a + b;
  }

  abstract calc1(): void;
  abstract calc2(): void;
}
然后在spec文件中,我们可以创建一个新的派生类:

class MyClass extends MyAbstractClass {
  // just mock any abstract method
  calc1(): void {
    return;
  }
  calc2(): void {
    return;
  }
}
现在我们可以为非抽象方法编写测试:

describe('MyAbstractClass', () => {
  let myClass: MyClass;
  beforeEach(() => {
    myClass = new MyClass();
  });

  it('sum two args', () => {
    const a = 1, b = 2;

    const sum = myClass.sum(a, b);

    expect(sum).toBe(3);
  });
});

还创建了此测试示例的一个示例。

以下是我对使用内置抽象类
DomSanitizer
的角度管道
SafePipe
所做的测试

//1。导入要测试的管道/零部件
从“/safe.pipe”导入{SafePipe};
// 2. 导入抽象类
从“@angular/platform browser”导入{domsanizer};
// 3. 重要步骤-创建一个可扩展的模拟类
//从上面导入的基类中添加
//模拟方法
类MockDomSanitizer扩展了DomSanitizer{
清理():字符串{
返回“ANY”;
}
bypassSecurityTrustHtml():字符串{
返回“ANY”
}
bypassSecurityTrustStyle():字符串{
返回“ANY”
}
bypassSecurityTrustScript():字符串{
返回“ANY”
}
bypassSecurityTrustUrl():字符串{
返回“ANY”
}
bypassSecurityTrustResourceUrl():字符串{
返回“ANY”
}
}
描述('SafePipe',()=>{
它('应该返回一个HTML字符串',()=>{
//4.创建pipe类的实例并在上面注入模拟类
设safePipe=new safePipe(new mockdomsanizer());
//5.将您的资产添加为ususal
expect(safePipe.transform(null,'html')).toBeTruthy();
expect(safePipe.transform(null,'style')).toBeTruthy();
expect(safePipe.transform(null,'script')).toBeTruthy();
expect(safePipe.transform(null,'url')).toBeTruthy();
expect(safePipe.transform(null,'resourceUrl')).toBeTruthy();
expect(safePipe.transform(null,'anything')).toContain('anything');
});

});为什么?只要用一个空类来扩展它。@DaveNewton-在规范文件中?无论在哪里,我都是矛盾的。如果你在其他地方没有具体的实现,那么是的,在规范中写一个最小的实现。它不适用于angular,我有一个基本的抽象类,其中几乎所有的逻辑和功能都是真实组件编写的,然后我有两个组件,除了不同的html和css之外,没有任何逻辑代码。当我运行测试时,它不会识别基类的代码覆盖率,即使我已经为基类编写了测试。使用你的方法。