【问题标题】:Testing Typescript Interface with Jest用 Jest 测试 Typescript 接口
【发布时间】: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);
});

【问题讨论】:

    标签: reactjs typescript jestjs create-react-app


    【解决方案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”。双 '*' 导致错误。
    猜你喜欢
    • 2019-12-28
    • 2019-03-04
    • 2021-08-15
    • 1970-01-01
    • 2020-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多