typescript - Nimeä 'describe' ei löydy. Tarvitseeko sinun asentaa tyyppimääritelmät testiajurille?


Kun käytän TypeScriptiä yhdessä Jestin kanssa, spesifikaationi epäonnistuisivat virheilmoitusten kanssa, kuten:

test/unit/some.spec.ts:1:1 - error TS2582: Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
test/unit/some.spec.ts:2:3 - error TS2582: Cannot find name 'it'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
test/unit/some.spec.ts:3:7 - error TS2304: Cannot find name 'expect'.
test/unit/some.spec.ts:7:1 - error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.

Tyypit on jo asennettu.

Minä käytän:

    "@types/jest": "^23.3.12",
    "jest": "^23.6.0",
    "ts-jest": "^23.10.5",
    "typescript": "^3.1.6"

Suoritan testit käyttämällä jest --forceExit --coverage --verbose

Vastaus #1

Se on hieman hankala, koska sekä IDE:si (eli Visual Studio Code) että TypeScript käyttävät tsconfig.json-tiedostoa omiin tarkoituksiinsa.

Yksinkertainen tarkistuslista alkuperäisen ongelman ratkaisemiseksi:

(kun käytetään TypeScriptiä ja Jestiä)

  1. Varmista, että sinulla on asennettuna @types/jest ja @types/node.
  2. Varmista, että olet linkittänyt nämä tyypit tsconfig.json-tiedostossa niin, että: "types": ["jest", "node"]
  3. Varmista, että testejäsi tai tests-kansiota ei ole suljettu pois tsconfig.json-asetuksista excluded-ominaisuudessa.

Sivuvaikutus transpilaatiolle

Nyt, jos rakennat sovellustasi millä tahansa TypeScriptistä JavaScriptiin kääntäjällä, joka perustuu tsconfig.json-tiedostoon (esimerkiksi: tsc, joka toimitetaan TypeScript-paketin asennuksen yhteydessä), saatat huomata, että myös testisi käännetään tällaisessa tapauksessa, koska olet sisällyttänyt ne rakennukseen. (Tarkista tulos-/build-hakemisto ja näet niiden .js-vastineet).

Jos olet tässä vaiheessa hämmentynyt tai se vaikuttaa liian vaikealta - tutustu ensin tsconfig.json -tiedoston määritysdokumentaatioon ja palaa sitten takaisin.

Useimmissa tapauksissa sinulla on joko:

  1. erillinen tsconfig.prod.json, jossa on määritys, joka laajentaa tai korvaa oletuksen. On monia asetuksia, kuten inlineSource, sourceMaps, inlineSourceMaps, jotka todennäköisesti haluat myös poistaa käytöstä.

Esimerkki :

tsc --project tsconfig.prod.json

suorittaa käännös

  1. Jokinlainen skripti: shell/bash- tai terminaalikomento, joka ylikirjoittaa oletusasetukset tiettyjen lipukkeiden avulla. Esimerkiksi voit käyttää lippua --excludeFiles tai --excludeDirectories poistaaksesi testisi rakennuksesta dokumentaation mukaisesti.

Esimerkki :

npx tsc --inlineSourceMap false --declarationMap false --inlineSources false --sourceMap false

Sitten, onnistuneen koodin muunnoksen jälkeen, voit käyttää kirjastoa kuten rimraf poistaaksesi tarpeettomat tiedostot ja kansiot. Se saattaa olla vähemmän vaikeaa kuin kokoonpanon ylikirjoittaminen ja helpompi ylläpitää rakennusvaiheena.

Esimerkki :

npx rimraf build/**/*.test.js

IDE:n tai TypeScript-palvelun uudelleenkäynnistys

Huomautus: Joskus voi kestää hetken, ennen kuin IDE:si (tai tarkalleen ottaen TypeScript-palvelu) ottaa muutokset käyttöön. Anna sille muutama sekunti aikaa käsitellä ja indeksoida uudelleen. Jos haluat suorittaa uudelleenkäynnistyksen manuaalisesti:

  • VSCodessa ikkunan oikeassa alakulmassa on merkintä, esim. "TypeScript 4.2.1". Klikkaa tätä ja valitse: "Käynnistä palvelu uudelleen"

  • Vaihtoehtoisesti VSCodessa - käytä Ctrl+Shift+P tai CMD+Shift+P. Sinun pitäisi nähdä avattava valikko, johon kirjoitat: ">Typescript" ja valitset: ">TypeScript: restart service."

  • WebStormissa (2024.3) valitse -> Asetukset | Kielet & Kehykset | TypeScript.

Vinkki: Tarkista konfiguraatiosi, mistä Node ja TypeScript haetaan. Joskus, kun asennat liian monta versiota tai projektia, se saattaa vaihtaa tai siirtyä johonkin vanhaan paikkaan ja aiheuttaa ongelmia. Sen pitäisi osoittaa joko siihen versioon, jonka tarkoitit asentaa (esimerkiksi käyttämällä nvm:ää tai muuta versionhallintaa) tai projektisi node_modules-kansioon.

Esimerkki Webstormissa:

Vinkki 2: Ota aikaa, yritä ymmärtää NodeJS:n ja TypeScriptin välinen korrelaatio, tiedostosi ja mitä tapahtuu kulissien takana. Älä kiirehdi projektin pystyttämisessä ja ole perusteellinen vaihe vaiheelta. Useimmat TypeScript-ongelmat on helppo ratkaista, jos ymmärrät, mitä yrität saavuttaa tietyssä vaiheessa.

Vastaus #2

Käytän Visual Studio Codea IDE:näni Angular-projektissani, ja minun piti kommentoida/poistaa tyyppejä tiedostosta tsconfig.json ja lisätä "jest" tyyppeihin tiedostossa tsconfig.spec.json.

Tiedosto tsconfig.json

{
  "compilerOptions": {
    // "types": []
  }
}

Tiedosto tsconfig.spec.json

{
  "compilerOptions": {
    "types": ["jest", "node"]
  }
}

Vastaus #3

Tämä toimi minulle:

import '@types/jest';

Vastaus #4

Mikään aiemmista vastauksista ei ratkaissut ongelmaani.

Minun piti lisätä "@types/jest" types-taulukkoon tsconfig.json-tiedostossa.

Vastaus #5

Ainoa tapa, jolla pystyin korjaamaan tämän, oli lisätä tests/-kansio "include"-kohtaan tsconfig.json-tiedostossa:

"include": [
  "src/**/*.ts",
  "tests/*.ts"
] 

Niille, joilla myös ESLint valittaa, sinun täytyy lisätä Jest tiedostoosi .eslintrc.json:

"env": {
  "es2020": true,
  "node": true,
  "jest": true
}

Vastaus #6

Kun olin kyttäillyt tsconfig.json:ia hetken, tajusin lopulta, että "types": [], kommentoiminen toimii.

Eponnistuva määritys (ennen)

// tsconfig.json
{
  "compilerOptions": {
    "types": []
  }
}

Toimiva kokoonpano

// tsconfig.json
{
  "compilerOptions": {
    // "types": []
  }
}

Vastaus #7

Sinun täytyy tuoda Jest testitiedostoosi:

import 'jest';

Toinen tapa ratkaista se on lisätä se tsconfig.json-tiedostoosi:

   "compilerOptions": {
     "types": [ "node", "jest" ],
     "moduleResolution": "node"
   }

Jos käytät TSLintiä, ongelma saattaa olla tarpeeton pilkku tsconfig.json -tiedostosi lopussa, esimerkiksi:

{
  "compileOnSave": true,
  "include": [
    "src"
  ],  // Remove this comma
}

Vastaus #8

Minun tapauksessani (Visual Studio Code, Create React App, Yarn-työtilat, Jest v26, @types/jest, "types": ["node", "jest"] läsnä tsconfig.json:ssa) testit ajettiin oikein, mutta IDE alleviivasi kaikkia describeja it -kohtia punaisella.

Mikään ei auttanut, ennen kuin latasin uudelleen Visual Studio Code -ikkunan pitkän yrityksen jälkeen.

Vastaus #9

Seuraava kokoonpano toimii minulle. Lisäsin node_modules/@types kohtaan typeRoots.

{
  "compilerOptions": {
    // ...rest of my settings
    "typeRoots": ["node_modules/@types"],
    "types": ["jest", "node"]
  }
}

Vastaus #10

Sinun täytyy sisällyttää testipolkusi tiedostoon tsconfig.json.

Esimerkki: oletetaan, että nimetit polkusi tests/ ja laitoit sen juuriprojektihakemistoon, sinun täytyy määrittää tsconfig-tiedoston "include"-parametrissa, että se etsii testitiedostoja:

  1. Siirry kohtaan: tsconfig.json

  2. Lisää :

    "include": [
        "tests/*.<file_test_extension>",
    ],
    

    <file_test_extension>: ts | js | jne.

Vastaus #11

Sinun täytyy sisällyttää tsconfig.json-tiedostoon testipolkusi.

Ratkaisin ongelman pitämällä projektini juuressa tsconfig.json ja tsconfig.build.json. tsconfig.json sisältää kaikki asetukset mukaan lukien

"include": ["src/**/*", "test/**/*"],

tsconfig.build.json:

{
  "extends": "./tsconfig.json",
  "include": ["src/**/*"]
}

Sitten package.json-tiedostossa (clean-skripti on valinnainen):

"scripts": {
  "clean": "rm -rf dist",
  "build": "npm run clean && tsc --build tsconfig.build.json,
  ...
}

Vastaus #12

Voit olla erillinen tsconfig.json testikansiossa __tests__:

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "../build",
        "noEmit": true,
        "rootDir": "../",
    },
    "exclude": ["node_modules"],
}

joka laajentaa juurikansiossa olevaa:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "./lib",
    "rootDir": "./src",
    "strict": true,
    "noImplicitAny": true,
    "esModuleInterop": true,
  },
  "exclude": ["node_modules", "**/*.test.ts", "__tests__"]
}

Tällä tavalla testitiedostosi jäävät edelleen pois julkisesta koosteesta, mutta voivat silti jakaa kaikki yleiset asetukset.

Jos käytät includes-komentoa excludes-komennon sijasta tai yhdessä sen kanssa, varmista, että käytät sitä myös laajennuksessasi, esimerkiksi:

tsconfig.json

{
  "includes": ["src"],
  ...
}

tests/tsconfig.json

{
  "extends": "../tsconfig.json"
  "includes": ["../"]
}

Tämä ei muuta sitä, mitä sisällytetään rakennuskansioosi, mutta se sallii Visual Studio Coden löytää Jest-tyyppisi.

Aiheeseen liittyviä artikkeleita