开玩笑打字稿检查类型

时间:2020-09-23 14:42:06

标签: 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”仅引用一种类型,但在此处用作值。

那么我如何测试我返回的数据是有效的并且是正确的类型?

1 个答案:

答案 0 :(得分:0)

.toBeInstanceOf(Class)方法接受必须为一个类的参数。

您应该让TSC检查在编译时是否收到了正确的数据类型。

在运行时,您可能想使用expect.objectContaining(object)匹配任何递归匹配预期属性的接收对象。