gpt4 book ai didi

angular - 如何使用 Jasmine 测试 TypeScript 抽象类

转载 作者:行者123 更新时间:2023-11-28 20:38:16 25 4
gpt4 key购买 nike

我在 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 至少可以提供帮助。

沿着这些思路的几个方法:

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

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

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

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

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

关于angular - 如何使用 Jasmine 测试 TypeScript 抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com