如何在打字稿中对模型接口进行单元测试?
How to unit test model interfaces in typescript?
export interface User {
name: string;
}
如何对上述接口进行单元测试,以便 Karma 可以在代码覆盖率报告中显示它?
我已经尝试创建对象并声明一些属性,但没有成功。测试通过但 karma 没有在代码覆盖率报告中考虑它。
import { User } from "./user";
describe('User', () => {
it('test', () => {
const obj: User = {
name: "xxx",
}
expect(obj.name).toEqual("xxx");
});
});
你不能。这里没有要涵盖的代码:没有任何内容是可执行的。
并且接口只存在于编译时。它们在运行时不存在。
对于有类似问题的未来用户,我提出了以下用于测试界面的系统(我只将其用于特别古怪的界面,比如我自动生成的界面)。这绝对是一种解决方法,但如果未正确指定接口,它确实会导致我的构建失败。
首先,在 "test" 中,将具有预期字段和类型的对象转换为接口。例如,
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
再次声明:我的测试中没有断言,因此它们不是真正的单元测试,这是一种解决方法。但是这个过程已经提醒了我几次问题,所以它达到了目的。
export interface User {
name: string;
}
如何对上述接口进行单元测试,以便 Karma 可以在代码覆盖率报告中显示它?
我已经尝试创建对象并声明一些属性,但没有成功。测试通过但 karma 没有在代码覆盖率报告中考虑它。
import { User } from "./user";
describe('User', () => {
it('test', () => {
const obj: User = {
name: "xxx",
}
expect(obj.name).toEqual("xxx");
});
});
你不能。这里没有要涵盖的代码:没有任何内容是可执行的。
并且接口只存在于编译时。它们在运行时不存在。
对于有类似问题的未来用户,我提出了以下用于测试界面的系统(我只将其用于特别古怪的界面,比如我自动生成的界面)。这绝对是一种解决方法,但如果未正确指定接口,它确实会导致我的构建失败。
首先,在 "test" 中,将具有预期字段和类型的对象转换为接口。例如,
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
再次声明:我的测试中没有断言,因此它们不是真正的单元测试,这是一种解决方法。但是这个过程已经提醒了我几次问题,所以它达到了目的。