reactjs - Testarea interfeței Typescript cu Jest


Mai jos este interfața mea și fișierul de test. Când rulez testele jest împotriva lui pentru acoperirea codului, continuă să spună că liniile 1 și 2 nu sunt acoperite de teste. Este posibil ca acoperirea codului să fie realizată pentru interfețe? Sau ar trebui să exclud orice interfață din rapoartele de acoperire?

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);
});

Răspuns #1

Aceasta este o problemă cunoscută cu ts-jest (Problema #378). Proprietarii proiectului recomandă în prezent excluderea fișierelor de interfață din acoperirea Jest:

kulshekhar a comentat pe 1 ianuarie 2018:

Nu cred că există ceva care poate fi făcut în ts-jest pentru a rezolva acest lucru. Am analizat mai atent această problemă și există două moduri de a obține rezultatul dorit:

  • exclude fișierele care conțin doar tipuri din acoperire
  • adaugă și exportă o funcție/variabilă dummy dintr-un fișier care conține doar tipuri

Când TypeScript transpilează fișiere, nu convertește importurile 'pure type' în instrucțiuni require. Acest lucru face ca Jest să nu preia și să nu transmită acele fișiere către ts-jest.

GeeWee a comentat pe 2 ianuarie 2018:

Nu cred că putem exclude fișierele care conțin doar tipuri. De asemenea, cred că acesta este un „wontfix”, cu excepția cazului în care Jest adaugă posibilitatea ca transformatoarele să excludă fișierele din acoperire sau ceva asemănător.

De exemplu, ați putea folosi coveragePathIgnorePatterns pentru a exclude fișiere bazate pe o convenție de denumire pentru fișiere care conțin doar tipuri (de exemplu, un prefix I urmat de o literă mare, cum ar fi „ISerializable”):

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