it-swarm.com.de

Angular 2 Unit-Tests: Name 'beschreiben' nicht gefunden

Ich verfolge dieses Tutorial von angle.io

Wie gesagt, ich habe die Datei hero.spec.ts erstellt, um Unit-Tests zu erstellen:

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

Unit Tests funktionieren wie ein Zauber. Das Problem ist: Ich sehe einige Fehler, die im Tutorial erwähnt werden:

Unser Redakteur und der Compiler beschweren sich möglicherweise darüber, dass sie nicht wissen, was it.__ ist. und expect liegen daran, dass ihnen die Typisierungsdateien fehlen, die .__ beschreiben. Jasmin. Wir können diese lästigen Beschwerden vorerst ignorieren, so wie sie sind. harmlos.

Und sie haben es tatsächlich ignoriert. Obwohl diese Fehler harmlos sind, sieht es in meiner Ausgabekonsole nicht gut aus, wenn ich eine Menge davon bekomme.

Beispiel für das, was ich bekomme:

Kann den Namen 'beschreiben' nicht finden.

Name 'it' kann nicht gefunden werden.

Kann den Namen "Erwarten" nicht finden.

Was kann ich tun, um das Problem zu beheben?

162
Piotrek

Ich hoffe du hast installiert -

npm install --save-dev @types/jasmine

Legen Sie dann den folgenden Import oben in die hero.spec.ts-Datei -

import {} from 'jasmine';

Es sollte das Problem lösen.

334
ksharifbd

Mit [email protected] oder höher können Sie Typen installieren mit:

npm install -D @types/jasmine

Dann importieren Sie die Typen automatisch mit der Option types in tsconfig.json:

"types": ["jasmine"],

Diese Lösung erfordert nicht import {} from 'jasmine'; in jeder Spezifikationsdatei.

136
Jiayi Hu
npm install @types/jasmine

Wie in einigen Kommentaren erwähnt, wird der "types": ["jasmine"] nicht mehr benötigt, alle @types-Pakete werden automatisch in die Kompilierung einbezogen (seit Version 2.1 denke ich).

Die einfachste Lösung ist meiner Meinung nach, die Testdateien in Ihrer tsconfig.json auszuschließen: 

"exclude": [
    "node_modules",
    "**/*.spec.ts"
]

Das funktioniert für mich.

Weitere Informationen in den offiziellen tsconfig docs .

23
lenny

Sie müssen Typisierungen für Jasmin installieren. Angenommen, Sie haben eine relativ neue Version von TypeScript 2, die Sie in der Lage sein sollten:

npm install --save-dev @types/jasmine

13
Pace

Mit [email protected] oder höher können Sie Typen mit npm install installieren 

npm install --save-dev @types/jasmine

importieren Sie die Typen dann automatisch mit der Option typeRoots in tsconfig.json.

"typeRoots": [
      "node_modules/@types"
    ],

Diese Lösung erfordert keinen Import {} von 'Jasmin'; in jeder Spezifikationsdatei.

7
mvermand

Ich bin auf dem neuesten Stand von heute und habe den besten Weg gefunden, dies zu lösen, nichts zu tun ... nein typeRoots no types no exclude no include all Die Standardeinstellungen scheinen gut zu funktionieren. Eigentlich funktionierte es nicht richtig für mich, bis ich sie alle entfernte. Ich hatte: "exclude": [ "node_modules" ] Aber das ist in den Standardeinstellungen, also habe ich das entfernt.

Ich hatte: "types": [ "node" ] , um an einer Compiler-Warnung vorbeizukommen. Aber jetzt entfernte ich das auch.

Die Warnung sollte nicht lauten: error TS2304: Cannot find name 'AsyncIterable'. Aus node_modules\@types\graphql\subscription\subscribe.d.ts

das ist sehr abscheulich, also habe ich dies in tsconfig gemacht, so dass es geladen wird: "compilerOptions": { "target": "esnext", } Ich benutze es nicht direkt, also mache ich mir hier noch keine Sorgen um Kompatibilität. Hoffe das brennt mich später nicht.

3
philn5d

Die Lösung dieses Problems hängt mit dem zusammen, was @Pace hat in seiner Antwort geschrieben hat. Es erklärt jedoch nicht alles. Wenn Sie nichts dagegen haben, schreibe ich es selbst.

LÖSUNG:

Hinzufügen dieser Zeile:

///<reference path="./../../../typings/globals/jasmine/index.d.ts"/>

am Anfang der hero.spec.ts-Datei wird das Problem behoben. Der Pfad führt zum Ordner typings (in dem alle Eingaben gespeichert sind).

Um Typisierungen zu installieren, müssen Sie im Stammverzeichnis Ihres Projekts eine typings.json-Datei mit folgendem Inhalt erstellen:

{
  "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"
  }
}

Führen Sie typings install aus (wobei typings das NPM-Paket ist).

3
Piotrek

Ich musste nur folgendes tun, um @types in einem Lerna Mono-Repo .__ aufzunehmen. wo mehrere node_modules existieren.

npm install -D @types/jasmine

Dann in jedem tsconfig.file jedes Moduls oder jeder App

"typeRoots": [
  "node_modules/@types",
  "../../node_modules/@types" <-- I added this line
],
2
SoEzPz

In meinem Fall bestand die Lösung darin, die typeRoots in meinem tsconfig.json zu entfernen.

Wie Sie im TypeScript-Dokument lesen können

Wenn typeRoots angegeben ist, werden nur Pakete unter typeRoots eingeschlossen.

2
moppag

Ich bin bei 'Angular 6', 'TypeScript 2.7' und verwende 'jest' - Framework für den Komponententest '@ types/jest' wurde installiert und hinzugefügt an 'typeRoots' in 'tsconfig.json'..__
Aber haben Sie immer noch den Anzeigefehler (d. H. Am Terminal gibt es keine Fehler)

kann den Namen nicht finden

Und den Import hinzufügen:

import {} from 'jest'; // in my case or jasmine if you're using jasmine

technisch tut nichts, also dachte ich, dass irgendwo ein Import das Problem verursacht, dann habe ich festgestellt, dass die Datei gelöscht wird 

tsconfigspec.json 

im Ordner src/ wurde das Problem für mich gelöst. As @types wird vor den rootTypes..__ importiert.
Ich empfehle, dass Sie dasselbe tun und diese Datei löschen, es ist keine erforderliche Konfiguration darin. (ps: wenn Sie im selben Fall sind wie ich)
✌✌✌

0
getName

Schauen Sie sich den Import an. Möglicherweise haben Sie eine cycle-Abhängigkeit . Dies war in meinem Fall der Fehler. Durch Verwendung von import {} from 'jasmine'; werden die Fehler in der Konsole behoben und der Code wird kompiliert, der Teufelsstamm wird jedoch nicht entfernt (in meinem Fall der Zyklus) Abhängigkeit).

0
G.Vitelli

Damit der TypeScript Compiler während der Kompilierung alle sichtbaren Typdefinitionen verwenden kann, sollte die Option types vollständig aus dem Feld compilerOptions in der Datei tsconfig.json entfernt werden. 

Dieses Problem tritt auf, wenn types-Einträge im compilerOptions-Feld vorhanden sind, wobei gleichzeitig jest-Eintrag fehlt.

Um das Problem zu beheben, sollte das compilerOptions-Feld in Ihrem tscongfig.json entweder jest in den types-Bereich aufnehmen oder types vollständig löschen:

{
  "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"
  ]
}
0
Omer Gurarslan

Ich füge nur die Antwort für das, was für mich in "TypeScript" funktioniert, hinzu: "3.2.4" Ich habe festgestellt, dass Jasmin in node_modules/@ types einen Ordner für ts3.1 unter dem Jasmintyp hat.

  • Installiere den Typ jasmine npm install -D @types/jasmine
  • Fügen Sie zu tsconfig.json jasmine/ts3.1 hinzu

    "typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],

  • Fügen Sie Jasmin den Arten hinzu

    "types": [ "jasmine", "node" ],

Hinweis: Dieser import 'jasmine'; wird nicht mehr benötigt.

0
Eslam Mahgoub