我有一个非常简单的抽象类,我在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.
});
}
我想知道如何编写一个基本的隔离单元测试,检查上面的类是否可以实现并调用其单个方法。我知道我会以某种方式嘲笑课程的实现,但我不确定如何解决这个问题。
答案 0 :(得分:1)
我不知道在TypeScript中自动删除抽象类实现的方法。如果你找到一个,这是一个不错的选择。但是对于spyOn
和相关行为,Jasmine至少可以提供帮助。
一对夫妇沿着这条路走:
您已经在DefaultLayoutGeneratorService
中拥有了一个实现,因此您可以将其用作模拟实现,特别是与spyOn
结合使用,例如:
let defaultLayoutGeneratorService = new DefaultLayoutGeneratorService();
spyOn(defaultLayoutGeneratorService, 'generateTemplate');
如果您需要测试多个特定输出,可以将其与.and.returnValue
一起使用,例如:
spyOn(...).and.returnValue(Observable.of('hello'));
或者您可以实现单独的模拟。 (可能因为DefaultLayoutGeneratorService
难以实例化,或者只是为了解耦。)如果你想测试特定的输出或只是将模拟中的测试逻辑解耦,你仍然可以使用上面的spyOn
。
然后调用要测试的各种方法,例如mock.generateTemplate(page, deviceType)
。并包括您需要的任何其他检查,可能利用Jasmine的expect
。