如何在打字稿中单元测试模型接口?

时间:2018-04-18 18:53:27

标签: angular typescript jasmine karma-jasmine karma-coverage

export interface User {
    name: string;
}

我如何对上述界面进行单元测试,因此Karma可以在代码覆盖率报告中显示它?

我已经尝试过创建对象并声明一些属性,但是没有用。测试通过,但业力并未在代码覆盖率报告中考虑它。

import { User } from "./user";

describe('User', () => {

    it('test', () => {
        const obj: User = {
            name: "xxx",

        }
        expect(obj.name).toEqual("xxx");
    });

});

2 个答案:

答案 0 :(得分:9)

你做不到。这里没有代码可供覆盖:没有任何内容可执行。

接口仅在编译时存在。它们在运行时不存在。

答案 1 :(得分:0)

对于将来有类似问题的用户,我想出了以下系统来测试界面(我只在特别古怪的界面(如我自动生成的界面)中使用)。绝对是一种解决方法,但是如果未正确指定接口,它的确会使我的构建失败。

首先,在“测试”中,将具有预期字段和类型的对象转换为接口。例如,

interface MyInterface = { 
  id: number;
  createTime: Date;
}

test("MyInterface should have appropriate fields and types", () => {
  ({
    id: 3,
    createTime: new Date(),
  } as MyInterface);
})

然后,我添加了一个用于编译TypeScript的构建步骤,如果更改MyInterface,它将出错。

tsc --noEmit

再次:我的测试中没有断言,因此它们不是真正的单元测试,这是一种解决方法。但是此过程使我多次警惕问题,因此可以达到目的。