我在 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.
});
}
我想知道我将如何编写一个基本的隔离单元测试来检查上面的类是否可以实现并调用它的单个方法。我知道我将不得不以某种方式模拟该类的实现,但我不太确定该怎么做。
最佳答案
我不知道有一种方法可以在 TypeScript 中自动删除抽象类的实现。如果你找到了,那是一个不错的选择。但是对于 spyOn
和相关行为,Jasmine 至少可以提供帮助。
沿着这些思路的几个方法:
您已经在
DefaultLayoutGeneratorService
中实现了一个实现,因此您也可以将其用作模拟实现,尤其是与spyOn
结合使用时,例如:let defaultLayoutGeneratorService = new DefaultLayoutGeneratorService(); spyOn(defaultLayoutGeneratorService, 'generateTemplate');
如果您需要测试几个特定的输出,您可以将其与
.and.returnValue
一起使用,例如:spyOn(...).and.returnValue(Observable.of('hello'));
或者您可以实现一个单独的模拟。 (可能是因为
DefaultLayoutGeneratorService
很难实例化,或者只是解耦。)如果你想测试特定的输出或只是将测试逻辑与 mock 解耦,你仍然可以使用spyOn
如上。
然后调用各种方法进行测试,如mock.generateTemplate(page, deviceType)
。并包括您需要的任何额外检查,可能利用 Jasmine 的 expect
。
关于angular - 如何使用 Jasmine 测试 TypeScript 抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715242/