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

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 中对调用另一个模型的方法的模型方法进行单元测试

在单独的文件中对 Mongoose 模型进行单元测试会导致问题(使用 Mockgoose & Lab)

如何在订阅Angular7单元测试用例中对代码进行单元测试

如何在 Typescript 中对私有方法进行单元测试

如何在C#中对单元测试性能优化进行单元测试?

如何在 java 中对这个方法进行单元测试?