如何在打字稿中对模型接口进行单元测试?
Posted
技术标签:
【中文标题】如何在打字稿中对模型接口进行单元测试?【英文标题】:How to unit test model interfaces in typescript? 【发布时间】:2018-09-29 03:04:46 【问题描述】: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");
);
);
【问题讨论】:
你不能。这里没有代码可以覆盖:没有什么是可执行的。并且接口只存在于编译时。它们在运行时不存在。 我没用过 Karma,但你试过用karma-typescript
运行测试吗?它可能会考虑到这样的不可访问的代码。 npmjs.com/package/karma-typescript
【参考方案1】:
你不能。这里没有要介绍的代码:没有什么是可执行的。
而且接口只存在于编译时。它们在运行时不存在。
【讨论】:
【参考方案2】:对于有类似问题的未来用户,我提出了以下用于测试界面的系统(我只使用特别古怪的界面,比如我自动生成的界面)。这绝对是一种解决方法,但如果没有适当地指定接口,它确实会使我的构建失败。
首先,在“测试”中,将具有预期字段和类型的对象投射到接口中。例如,
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
再次重申:我的测试中没有断言,因此它们不是真正的单元测试,这是一种解决方法。但这个过程多次提醒我注意问题,所以它达到了目的。
【讨论】:
好主意...满足我的需求:防止不必要的界面更改。以上是关于如何在打字稿中对模型接口进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中对调用另一个模型的方法的模型方法进行单元测试