【问题标题】: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

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


【解决方案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
    

    再次重申:我的测试中没有断言,因此它们不是真正的单元测试,这是一种解决方法。但这个过程多次提醒我注意问题,所以它达到了目的。

    【讨论】:

    • 好主意...满足我的需求:防止不必要的界面更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2019-04-05
    • 1970-01-01
    • 2015-09-16
    • 2020-01-20
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多