使用Jest测试Typescript接口

时间:2018-02-15 18:19:35

标签: reactjs typescript jest create-react-app

以下是我的界面和测试文件。当我对它进行jest测试以获得代码覆盖时,它会一直说测试不包含第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 个答案:

答案 0 :(得分:2)

这是ts-jestIssue #378)的已知问题。项目所有者目前建议从Jest coverage中排除接口文件:

kulshekhar 于2018年1月1日发表评论:

  

我不认为可以用ts-jest来解决这个问题。我已经仔细研究了这个问题,有两种方法可以达到预期的效果:

     
      
  • 排除仅包含来自coverage的类型的文件
  •   
  • 从仅包含类型
  • 的文件中添加和导出虚拟函数/变量   
     

当TypeScript转换文件时,它不会转换纯类型'导入require语句。这导致Jest没有选择并将这些文件传递给ts-jest。

GeeWee 于2018年1月2日发表评论:

  

我认为我们不能排除只包含类型的文件。我也认为这是一个wontfix,除非jest为变换器增加了选择文件的覆盖范围或类似的东西。

例如,您可以使用coveragePathIgnorePatterns根据仅包含类型的文件(例如,I前缀后跟大写字母的命名约定来排除文件,例如" ISerializable&#34):

{
  "jest": {
    ...
    "coveragePathIgnorePatterns": [
      "**/I[A-Z]*.{ts}"
    ]
  }
}
相关问题