Je suis ce tutoriel de 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 qu'ils ne savent pas quoi
it
etexpect
parce qu'ils n'ont pas les fichiers de frappe qui décrivent Jasmine. Nous pouvons ignorer ces plaintes ennuyeuses pour l'instant car elles sont inoffensives.
Et ils l'ont en effet ignoré. Même si ces erreurs sont inoffensives, cela ne semble pas bon dans ma console de sortie lorsque j'en reçois un tas.
Exemple de ce que j'obtiens:
Impossible de trouver le nom «décrire».
Impossible de trouver le nom «it».
Impossible de trouver le nom «attendre».
Que puis-je faire pour le réparer?
la source
Réponses:
J'espère que vous avez installé -
Mettez ensuite l'import suivant en haut du
hero.spec.ts
fichier -Cela devrait résoudre le problème.
la source
@types/[email protected]
. Sinon, vous pouvez voir ces erreurs de compilation .import 'jasmine';
import {} from 'jasmine';
réellement? Est-ce la même chose queimport 'jasmine'
?Avec [email protected] ou version ultérieure, vous pouvez installer des types avec:
Importez ensuite les types automatiquement en utilisant l'
types
option danstsconfig.json
:Cette solution ne nécessite pas
import {} from 'jasmine';
dans chaque fichier de spécifications.la source
"types": ["jasmine"]
ligne. "Par défaut, tous les packages" @types "visibles sont inclus dans votre compilation. Les packages dans les types node_modules / @ de tout dossier englobant sont considérés comme visibles; en particulier, cela signifie que les packages dans ./node_modules/@types/, ../node_modules/@ types /, ../../node_modules/@types/, etc. "node
et desjasmine
types qui ne sont pas détectés. Au moins, cela ne fonctionne pas pour moi et j'utilise [email protected]ang-app/e2e/tsconfig.json
. Je l'ai essayée dans tous les niveaux json . Pourriez-vous s'il vous plaît ajouter plus de détails?Comme mentionné dans certains commentaires, le
"types": ["jasmine"]
n'est plus nécessaire, tous les@types
packages sont automatiquement inclus dans la compilation (depuis la v2.1 je pense).À mon avis, la solution la plus simple est d'exclure les fichiers de test dans votre tsconfig.json comme:
Cela fonctionne pour moi.
Plus d'informations dans les documents officiels de tsconfig .
la source
src/tsconfig.app.json
,src/tsconfig.spec.json
ettsconfig.json
. La section "exclure" mentionnée fait partie de la première."types": [ "jasmine" ]
partie du 2e.exclude
bloc.exclude
bloc tsconfig . Ensuite, j'ai créé un nouveautsconfig.build.json
fichier avec le modèle de fichier spec ajouté auexclude
bloc. Maintenant, dans mests-loader
options (dans le webpack.config) j'utilisetsconfig.build.json
. Avec ces configurations, les modules sont en cours de résolution dans les fichiers de test et lors de la création de la construction ou du démarrage du serveur, les fichiers de test sont exclus.Vous devez installer des typages pour le jasmin. En supposant que vous utilisez une version relativement récente de dactylographié 2, vous devriez pouvoir faire:
la source
Avec [email protected] ou ultérieur, vous pouvez installer des types avec npm install
puis importer les types automatiquement à l'aide typeRoots option tsconfig.json.
Cette solution ne nécessite pas l'importation {} de 'jasmine'; dans chaque fichier de spécifications.
la source
La solution à ce problème est liée à ce que @Pace a écrit dans sa réponse. Cependant, cela n'explique pas tout, donc, si cela ne vous dérange pas, je vais l'écrire moi-même.
SOLUTION:
Ajout de cette ligne:
au début du
hero.spec.ts
fichier corrige le problème. Le chemin mène autypings
dossier (où toutes les saisies sont stockées).Pour installer les typages, vous devez créer un
typings.json
fichier à la racine de votre projet avec le contenu suivant:Et exécutez
typings install
(oùtypings
est le package NPM).la source
Dans mon cas, était d'enlever la solution la
typeRoots
dans montsconfig.json
.Comme vous pouvez le lire dans la doc TypeScript
la source
Je suis à la dernière date d'aujourd'hui et j'ai trouvé que la meilleure façon de résoudre ce problème est de ne rien faire ... non
typeRoots
nontypes
nonexclude
noninclude
tous les paramètres par défaut semblent très bien fonctionner. En fait, cela n'a pas fonctionné pour moi jusqu'à ce que je les supprime tous. J'ai eu:mais c'est dans les valeurs par défaut, donc j'ai supprimé cela.
J'ai eu:
pour passer un avertissement du compilateur. Mais maintenant, je l'ai supprimé aussi.
L'avertissement qui ne devrait pas être:
error TS2304: Cannot find name 'AsyncIterable'.
denode_modules\@types\graphql\subscription\subscribe.d.ts
ce qui est très désagréable donc j'ai fait ça dans tsconfig pour qu'il le charge:
car il est dans l'ensemble esnext. Je ne l'utilise pas directement, donc pas de soucis de compatibilité pour l'instant. J'espère que ça ne me brûlera pas plus tard.
la source
"types": ["node"]
dans ,tsconfig.json
mais vous devez ajouter ce type danstsconfig.app.json
! Je pense que vous ne devriez plus avoir cet avertissement. Vous pouvez garder"target": "es5"
ou"target": "es6"
maintenant.Il suffisait de faire ce qui suit pour récupérer les @types dans un Lerna Mono-repo où plusieurs node_modules existent.
Puis dans chaque fichier tsconfig.file de chaque module ou application
la source
Pour que le compilateur TypeScript utilise toutes les définitions de type visibles pendant la compilation,
types
option doit être complètement supprimée ducompilerOptions
champ dutsconfig.json
fichier.Ce problème se pose lorsqu'il existe des
types
entrées dans lecompilerOptions
champ, où en même temps l'jest
entrée est manquante.Ainsi, afin de résoudre le problème, le
compilerOptions
champ dans votre champtscongfig.json
doit soit inclurejest
dans latypes
zone, soit vous en débarrassertypes
complètement:la source
google map types
entypes
option. Après avoir complètement supprimé l'option, cela a bien fonctionné.Je vais juste ajouter une réponse pour ce qui fonctionne pour moi dans "typescript": "3.2.4" J'ai réalisé que le jasmin dans les types node_modules / @ il y a un dossier pour ts3.1 sous le type jasmine alors voici les étapes: -
npm install -D @types/jasmine
Ajouter à tsconfig.json jasmine / ts3.1
"typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],
Ajouter du jasmin aux types
"types": [ "jasmine", "node" ],
Remarque: plus besoin de cela
import 'jasmine';
.la source
Dans mon cas, j'obtenais cette erreur lorsque je sers l'application, pas lors des tests. Je ne savais pas que j'avais un paramètre de configuration différent dans mon fichier tsconfig.app.json.
J'avais auparavant ceci:
Il incluait tous mes
.spec.ts
fichiers lors du service de l'application. J'ai changé d'include property to
exclusion` et ajouté une expression régulière pour exclure tous les fichiers de test comme ceci:Maintenant, cela fonctionne comme prévu.
la source
Regardez l'importation, vous avez peut-être une dépendance de cycle , c'était dans mon cas l'erreur, l'utilisation
import {} from 'jasmine';
corrigera les erreurs dans la console et rendra le code compilable mais ne supprime pas la racine du diable (dans mon cas, la dépendance de cycle).la source
Je suis sur Angular 6, Typescript 2.7, et j'utilise le framework Jest pour tester les unités. J'avais
@types/jest
installé et ajouté à l'typeRoots
intérieurtsconfig.json
Mais toujours l'erreur d'affichage ci-dessous (c'est-à-dire: sur le terminal il n'y a pas d'erreur)
Et en ajoutant l'importation:
ne fait rien techniquement, donc je pensais qu'il y avait une importation quelque part causant ce problème, alors j'ai trouvé que si supprimer le fichier
dans le
src/
dossier, a résolu le problème pour moi. Comme @types est importé avant dans les 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)
la source
si l'erreur se trouve dans le fichier .specs app / app.component.spec.ts (7,3): erreur TS2304: Impossible de trouver le nom 'beforeEach'.
ajoutez ceci en haut de votre fichier et installez npm rxjs
importer {range} depuis 'rxjs'; importer {map, filter} depuis 'rxjs / operators';
la source