export interface User {
name: string;
}
我如何对上述界面进行单元测试,因此Karma可以在代码覆盖率报告中显示它?
我已经尝试过创建对象并声明一些属性,但是没有用。测试通过,但业力并未在代码覆盖率报告中考虑它。
import { User } from "./user";
describe('User', () => {
it('test', () => {
const obj: User = {
name: "xxx",
}
expect(obj.name).toEqual("xxx");
});
});
答案 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
再次:我的测试中没有断言,因此它们不是真正的单元测试,这是一种解决方法。但是此过程使我多次警惕问题,因此可以达到目的。