javascript - 开 Jest typescript 检查类型

标签 javascript typescript unit-testing jestjs

假设我有以下界面:

export interface CMSData {
    id: number;
    url: string;
    htmlTag: string;
    importJSComponent: string;
    componentData: ComponentAttribute[];
}
然后我有一个 method返回 array此对象类型:
public async GetContent(url: string): Promise<CMSData[]>{
    const response = await super.get<ICMSContentData[]>(url, {});
    try {
        if (response?.parsedBody) {
            return this.ProcessResponse(response.parsedBody);
        } else {
            this.handleHTTPError(new Error("Error"));
            return [];
        }

    } catch (e) {
        this.handleHTTPError(e);
        return [];
    }

}
然后我想测试是否是这种情况,所以我写了以下 test :
import {ContentIOService} from "..";
import {CMSData} from "../IOServices/ContentIOService";

require('es6-promise').polyfill();
require('isomorphic-fetch');

test('Get Content', async () => {
    const service = ContentIOService.getInstance();
    const data = await service.GetContent("https://1c7207fb14fd3b428c70cc406f0c27d9.m.pipedream.net");
    console.log(data)
    expect(data).toBeInstanceOf(CMSData[]);
});
但是在这里我收到以下错误:

'CMSData' only refers to a type, but is being used as a value here.


那么如何测试我得到的数据是否有效且类型正确?

最佳答案

如果您要查找的类型是电话,.toBeInstanceOf(Class)方法接受一个参数 必须是 JavaScript 类构造函数而不是 TS 类型。
您应该让 TSC 在编译时检查您是否收到了正确类型的数据。在测试套件和测试用例中编写的代码在运行时执行,.toBeInstanceOf(Class)是运行时检查,而不是编译器时间。
在运行时,您可能想使用 expect.objectContaining(object)匹配任何递归匹配预期属性的接收对象。

关于javascript - 开 Jest typescript 检查类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64030428/

相关文章:

reactjs - 如何在 React 和 Typescript 中映射我的联合类型 GraphQL 响应数组

ruby - 为什么我的 rspec 测试在 Ruby 1.9.2 中比在 1.8.7 中运行得慢?

javascript - 使用 React.forwardRef 与自定义 ref prop 的值(value)

javascript - 在 IE9/Angular 5/TypeScript 上使用 FormData,无需 Ajax 或 jQuery

javascript - 使用 JS for 循环解析 JSON 键和值

css - Angular Material *ngFor 在 <mat-cell> 内用于搜索

c# - 如何模拟DbSet的Include方法?

scala - Akka 测试主管错误处理

javascript - Vue : Append component to element

javascript - 如何: write nice HTML code and Javascript console