Je suis ce tutoriel d'angular.io
Comme ils l'ont dit, j'ai créé le fichier hero.spec.ts pour créer des tests unitaires:
import { Hero } from './hero';
describe('Hero', () => {
it('has name', () => {
let hero: Hero = {id: 1, name: 'Super Cat'};
expect(hero.name).toEqual('Super Cat');
});
it('has id', () => {
let hero: Hero = {id: 1, name: 'Super Cat'};
expect(hero.id).toEqual(1);
});
});
Les tests unitaires fonctionnent comme un charme. Le problème est: je vois quelques erreurs, qui sont mentionnées dans le tutoriel:
Notre éditeur et le compilateur peuvent se plaindre de ne pas savoir ce que
it
etexpect
sont dus au manque des fichiers de typage décrivant Jasmin. Nous pouvons ignorer ces plaintes ennuyeuses pour l'instant telles qu'elles sont inoffensif.
Et ils l'ont effectivement ignoré. Même si ces erreurs sont inoffensives, cela n’apparaît pas très bien dans ma console de sortie lorsque j'en reçois beaucoup.
Exemple de ce que je reçois:
Impossible de trouver le nom 'décrire'.
Impossible de trouver le nom 'it'.
Impossible de trouver le nom 's'attendre'.
Que puis-je faire pour le réparer?
J'espère que vous avez installé -
npm install --save-dev @types/jasmine
Ensuite, placez l’importation suivante en haut du fichier hero.spec.ts
-
import {} from 'jasmine';
Cela devrait résoudre le problème.
Avec [email protected] ou version ultérieure, vous pouvez installer les types avec:
npm install -D @types/jasmine
Importez ensuite les types automatiquement à l'aide de l'option types
dans tsconfig.json
:
"types": ["jasmine"],
Cette solution ne nécessite pas import {} from 'jasmine';
dans chaque fichier de spécifications.
npm install @types/jasmine
Comme mentionné dans certains commentaires, le "types": ["jasmine"]
n'est plus nécessaire, tous les packages @types
sont automatiquement inclus dans la compilation (depuis la v2.1 je pense).
À mon avis, la solution la plus simple consiste à exclure les fichiers de test de votre tsconfig.json comme suit:
"exclude": [
"node_modules",
"**/*.spec.ts"
]
Cela fonctionne pour moi.
Plus d'informations dans les documents officiels tsconfig .
Vous devez installer des typographies pour le jasmin. En supposant que vous utilisez une version relativement récente de TypeScript 2, vous devriez être capable de faire:
npm install --save-dev @types/jasmine
Avec [email protected] ou version ultérieure, vous pouvez installer des types avec npm install
npm install --save-dev @types/jasmine
puis importez les types automatiquement en utilisant l’option typeRoots dans tsconfig.json.
"typeRoots": [
"node_modules/@types"
],
Cette solution ne nécessite pas l'importation {} de 'jasmine'; dans chaque fichier de spécifications.
Je suis au courant des dernières nouvelles et j'ai trouvé que le meilleur moyen de résoudre ce problème est de ne rien faire ... non typeRoots
non types
non exclude
non include
tous les valeurs par défaut semblent bien fonctionner. En fait, cela ne fonctionnait pas pour moi tant que je ne les ai pas tous supprimés. J'avais:
"exclude": [
"node_modules"
]
Mais c'est dans les valeurs par défaut alors j'ai enlevé ça.
J'avais:
"types": [
"node"
]
pour dépasser un avertissement du compilateur. Mais maintenant j'ai enlevé ça aussi.
L'avertissement qui ne devrait pas être est: error TS2304: Cannot find name 'AsyncIterable'.
À partir de node_modules\@types\graphql\subscription\subscribe.d.ts
ce qui est très odieux alors je l'ai fait dans tsconfig pour qu'il le charge:
"compilerOptions": {
"target": "esnext",
}
puisqu'il est dans le jeu esnext. Je ne l'utilise pas directement, alors ne vous inquiétez pas pour le moment de la compatibilité. J'espère que ça ne me brûlera pas plus tard.
La solution à ce problème est liée à ce que @Pace a écrit dans sa réponse. Cependant, cela n'explique pas tout, alors, si cela ne vous dérange pas, je vais l'écrire moi-même.
SOLUTION:
Ajout de cette ligne:
///<reference path="./../../../typings/globals/jasmine/index.d.ts"/>
au début du fichier hero.spec.ts
corrige le problème. Le chemin mène au dossier typings
(où sont stockés tous les types de saisie).
Pour installer des typages, vous devez créer un fichier typings.json
à la racine de votre projet avec le contenu suivant:
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160602141332",
"jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
"node": "registry:dt/node#6.0.0+20160807145350"
}
}
Et exécutez typings install
(où typings
est le package NPM).
Il suffisait de faire ce qui suit pour récupérer les @ types dans un Lerna Mono-repo .__ où plusieurs node_modules existent.
npm install -D @types/jasmine
Puis dans chaque fichier tsconfig.file de chaque module ou application
"typeRoots": [
"node_modules/@types",
"../../node_modules/@types" <-- I added this line
],
Dans mon cas, la solution consistait à supprimer la typeRoots
dans mon tsconfig.json
.
Comme vous pouvez le lire dans le doc TypeScript
Si typeRoots est spécifié, seuls les packages sous typeRoots seront inclus.
Je suis sur 'Angular 6', 'TypeScript 2.7', et j'utilise le framework 'plaisant' pour tester l'unité, '@ types/jest' installé et ajouté sur 'typeRoots' à l'intérieur de 'tsconfig.json'.
Mais l’erreur d’affichage ci-dessous persiste (c’est-à-dire qu’il n’ya pas d’erreur sur le terminal)
ne trouve pas le nom décrit
Et en ajoutant l'importation:
import {} from 'jest'; // in my case or jasmine if you're using jasmine
ne fait techniquement rien, alors je pensais qu'il y avait une importation quelque part causant ce problème, alors j'ai trouvé que si supprimer le fichier
tsconfigspec.json
dans le dossier src/, a résolu le problème pour moi. En tant que @types _ est préalablement importé à l'intérieur de rootTypes..____.
Je vous recommande de faire de même et de supprimer ce fichier, aucune configuration nécessaire n’est à l’intérieur. (ps: si vous êtes dans le même cas que moi)
✌✌✌
Regardez l’importation peut-être que vous avez une dépendance cycle , c’était dans mon cas l’erreur, utiliser import {} from 'jasmine';
corrigera les erreurs dans la console et rendra le code compilable sans supprimer la racine dépendance).
Pour que TypeScript Compiler utilise toutes les définitions de type visibles lors de la compilation, l’option types
doit être complètement supprimée du champ compilerOptions
du fichier tsconfig.json
.
Ce problème survient lorsqu'il existe des entrées types
dans le champ compilerOptions
, où en même temps l'entrée jest
est manquante.
Par conséquent, afin de résoudre le problème, le champ compilerOptions
de votre tscongfig.json
devrait soit inclure jest
dans la zone types
, soit se débarrasser de types
de façon complète:
{
"compilerOptions": {
"esModuleInterop": true,
"target": "es6",
"module": "commonjs",
"outDir": "dist",
"types": ["reflect-metadata", "jest"], //<-- add jest or remove completely
"moduleResolution": "node",
"sourceMap": true
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
Je vais juste ajouter Answer pour ce qui fonctionne pour moi dans "TypeScript": "3.2.4" J'ai réalisé que jasmine dans node_modules/@ types comporte un dossier pour ts3.1 sous le type jasmine, voici donc les étapes: -
npm install -D @types/jasmine
Ajouter à tsconfig.json jasmine/ts3.1
"typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],
Ajouter Jasmine aux types
"types": [ "jasmine", "node" ],
Remarque: Plus besoin de ce import 'jasmine';
.