如何使用Jasmine测试TypeScript抽象类

时间:2017-08-16 13:41:23

标签: angular typescript testing jasmine

我有一个非常简单的抽象类,我在Angular服务中实现。我正在尝试为它编写一些测试但是找不到有关在Jasmine文档中测试抽象类的任何信息。

import { Page } from '../models/index';

import { Observable } from 'rxjs/Observable';

export abstract class ILayoutGeneratorService {
  abstract generateTemplate(page: Page, deviceType: string ): Observable<string>;
}

抽象类的实现如下:

export class DefaultLayoutGeneratorService implements ILayoutGeneratorService { 
      generateTemplate(page: Page, deviceType: string): Observable<string> { 
        return Observable.create((observer: any) => {
           // do something with result. 
        }); 
}

我想知道如何编写一个基本的隔离单元测试,检查上面的类是否可以实现并调用其单个方法。我知道我会以某种方式嘲笑课程的实现,但我不确定如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

我不知道在TypeScript中自动删除抽象类实现的方法。如果你找到一个,这是一个不错的选择。但是对于spyOn和相关行为,Jasmine至少可以提供帮助。

一对夫妇沿着这条路走:

  1. 您已经在DefaultLayoutGeneratorService中拥有了一个实现,因此您可以将其用作模拟实现,特别是与spyOn结合使用,例如:

    let defaultLayoutGeneratorService = new DefaultLayoutGeneratorService();
    spyOn(defaultLayoutGeneratorService, 'generateTemplate');
    

    如果您需要测试多个特定输出,可以将其与.and.returnValue一起使用,例如:

    spyOn(...).and.returnValue(Observable.of('hello'));
    
  2. 或者您可以实现单独的模拟。 (可能因为DefaultLayoutGeneratorService难以实例化,或者只是为了解耦。)如果你想测试特定的输出或只是将模拟中的测试逻辑解耦,你仍然可以使用上面的spyOn

  3. 然后调用要测试的各种方法,例如mock.generateTemplate(page, deviceType)。并包括您需要的任何其他检查,可能利用Jasmine的expect