export interface User {
name: string;
}
我如何对上述接口进行单元测试,以便Karma可以在代码覆盖率报告中显示它?
我已经尝试创建对象并Assert一些属性,但没有成功。测试通过了,但是karma没有在代码覆盖率报告中考虑它。
import { User } from "./user";
describe('User', () => {
it('test', () => {
const obj: User = {
name: "xxx",
}
expect(obj.name).toEqual("xxx");
});
});
3条答案
按热度按时间cyvaqqii1#
你不能。这里没有代码可以解释:没有什么是可执行的。
而接口只存在于编译时。它们在运行时不存在。
q5lcpyga2#
对于将来有类似问题的用户,我提出了以下用于测试接口的系统(我只对特别古怪的接口使用,比如我自动生成的那些)。这绝对是一个解决方法,但是如果没有适当地指定接口,它确实会使我的构建失败。
首先,在“测试”中,将具有预期字段和类型的对象强制转换到接口中。比如说
然后,我添加了一个编译TypeScript的构建步骤,如果
MyInterface
被更改,它将出错。再次重申:我的测试中没有Assert,所以它们不是真实的的单元测试,这是一个解决方案。但是这个过程已经提醒我注意了几次问题,所以它达到了目的。
nuypyhwy3#
我的回答详细说明了@JB_Nizet的。
您不能对报告进行测试覆盖,但有替代方案:
**1.将你的接口放在一个单独的文件中,并指定在创建覆盖率报告时忽略它。**例如,我使用代码测试覆盖率报告的伊斯坦布尔库,它提供了忽略文件。为了使文件被忽略,在其中指定以下内容就足够了:
**2.如果你对类型和接口的合规性监控很重要,你可以为它们编写测试,这些测试将在验证过程中执行,但同时不影响覆盖率报告。**网上有很多关于如何做到这一点的选项,但我最喜欢将测试的接口分配给变量的方式。: