用 Jest 测试 Typescript 接口
Posted
技术标签:
【中文标题】用 Jest 测试 Typescript 接口【英文标题】:Testing Typescript Interface with Jest 【发布时间】:2018-07-26 14:26:46 【问题描述】:下面是我的界面和测试文件。当我针对它运行代码覆盖率的玩笑测试时,它一直说第 1 行和第 2 行没有被测试覆盖。接口的代码覆盖率甚至是可能的吗?还是应该从覆盖率报告中排除任何接口?
index.tsx
export interface StoreState
languageName: string;
enthusiasmLevel: number;
index.test.tsx
import StoreState from '../types';
it('has a languageName of "TypeScript"', () =>
const state: StoreState = languageName: 'TypeScript', enthusiasmLevel: 3 ;
expect(state.languageName).toEqual('TypeScript');
);
it('has an enthusiasm level of 3', () =>
const state: StoreState = languageName: 'TypeScript', enthusiasmLevel: 3 ;
expect(state.enthusiasmLevel).toEqual(3);
);
【问题讨论】:
【参考方案1】:这是ts-jest
(Issue #378) 的一个已知问题。项目所有者目前建议将接口文件排除在 Jest 覆盖范围之外:
kulshekhar 于 2018 年 1 月 1 日发表评论:
我认为在 ts-jest 中无法解决此问题。我仔细研究了这个问题,有两种方法可以获得预期的结果:
从覆盖范围中排除仅包含类型的文件 从仅包含类型的文件中添加和导出虚拟函数/变量当 TypeScript 转译文件时,它不会将“纯类型”导入转换为
require
语句。这会导致 Jest 不会选择这些文件并将其传递给 ts-jest。
GeeWee 评论于 2018 年 1 月 2 日:
我认为我们不能排除仅包含类型的文件。我也认为这是一个错误修复,除非 jest 增加了变形金刚选择文件不在覆盖范围内的能力或类似的东西。
例如,您可以使用coveragePathIgnorePatterns
来排除基于仅包含类型的文件的命名约定的文件(例如,I
前缀后跟大写字母,例如“ISerializable
”):
"jest":
...
"coveragePathIgnorePatterns": [
"**/I[A-Z]*.ts"
]
【讨论】:
对我来说,我需要使用以下正则表达式:“src/*/I[A-z]*.ts”。双 '*' 导致错误。以上是关于用 Jest 测试 Typescript 接口的主要内容,如果未能解决你的问题,请参考以下文章
用 Jest 测试 Vuejs 和 TypeScript 会导致错误“Property 'xxx' does not exist on type 'CombinedVueInstance'
使用 React、Typescript 和 ES6 进行 Jest 测试