Ich folge diesem Tutorial von angle.io
Wie gesagt, ich habe die Datei hero.spec.ts erstellt, um Komponententests 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 wirken wie ein Zauber. Das Problem ist: Ich sehe einige Fehler, die im Tutorial erwähnt werden:
Unser Editor und der Compiler beschweren sich möglicherweise, dass sie nicht wissen, was
it
undexpect
sind, weil ihnen die Typisierungsdateien fehlen, die Jasmine beschreiben. Wir können diese nervigen Beschwerden vorerst ignorieren, da sie harmlos sind.
Und sie haben es tatsächlich ignoriert. Obwohl diese Fehler harmlos sind, sieht es in meiner Ausgabekonsole nicht gut aus, wenn ich einige davon erhalte.
Beispiel für das, was ich bekomme:
Name 'beschreiben' kann nicht gefunden werden.
Der Name 'it' wurde nicht gefunden.
Der Name 'erwarten' kann nicht gefunden werden.
Was kann ich tun, um das Problem zu beheben?
quelle
Antworten:
Ich hoffe du hast installiert -
Fügen Sie dann den folgenden Import oben in die
hero.spec.ts
Datei ein -Es sollte das Problem lösen.
quelle
@types/[email protected]
. Andernfalls werden diese Kompilierungsfehler möglicherweise angezeigt .import 'jasmine';
import {} from 'jasmine';
eigentlich? Ist es das gleiche wieimport 'jasmine'
?Mit [email protected] oder höher können Sie Typen installieren mit:
Importieren Sie dann die Typen automatisch mit der
types
Option intsconfig.json
:Diese Lösung erfordert nicht
import {} from 'jasmine';
in jeder Spezifikationsdatei.quelle
"types": ["jasmine"]
Zeile nicht mehr hinzugefügt werden. "Standardmäßig sind alle sichtbaren" @ types "-Pakete in Ihrer Kompilierung enthalten. Pakete in node_modules / @ -Typen eines umschließenden Ordners werden als sichtbar betrachtet. Dies bedeutet insbesondere, dass Pakete in ./node_modules/@types/, ../node_modules/@ types /, ../../node_modules/@types/ und so weiter. "node
undjasmine
Typen werden nicht erkannt. Zumindest funktioniert es nicht für mich und ich benutze [email protected]ang-app/e2e/tsconfig.json
. Ich habe sie in jedem JSON-Level ausprobiert . Könnten Sie bitte weitere Details hinzufügen?Wie in einigen Kommentaren erwähnt, wird das
"types": ["jasmine"]
nicht mehr benötigt, alle@types
Pakete werden automatisch in die Kompilierung einbezogen (seit v2.1 denke ich).Meiner Meinung nach besteht die einfachste Lösung darin, die Testdateien in Ihrer tsconfig.json wie folgt auszuschließen :
Das funktioniert bei mir.
Weitere Informationen in den offiziellen tsconfig-Dokumenten .
quelle
src/tsconfig.app.json
,src/tsconfig.spec.json
undtsconfig.json
. Der erwähnte Abschnitt "Ausschließen" ist Teil des ersten."types": [ "jasmine" ]
Teil des 2 ..exclude
Block entfernen .exclude
Block von tsconfig entfernt . Dann habe ich eine neuetsconfig.build.json
Datei mit dem demexclude
Block hinzugefügten Muster der Spezifikationsdatei erstellt . Jetzt verwende ich in meinents-loader
Optionen (in der webpack.config)tsconfig.build.json
. Bei diesen Konfigurationen werden die Module in den Testdateien aufgelöst, und beim Erstellen des Builds oder Starten des Servers werden die Testdateien ausgeschlossen.Sie müssen Typisierungen für Jasmin installieren. Angenommen, Sie befinden sich in einer relativ neuen Version von Typoskript 2, sollten Sie in der Lage sein:
quelle
Mit [email protected] oder höher können Sie Typen mit npm install installieren
importiert dann die Typen automatisch die Verwendung typeRoots Option in tsconfig.json.
Diese Lösung erfordert keinen Import {} von 'Jasmin'; in jeder Spezifikationsdatei.
quelle
Die Lösung für dieses Problem hängt mit dem zusammen, was @Pace geschrieben hat in seiner Antwort geschrieben hat. Es erklärt jedoch nicht alles. Wenn es Ihnen nichts ausmacht, schreibe ich es selbst.
LÖSUNG:
Hinzufügen dieser Zeile:
am Anfang der
hero.spec.ts
Datei behebt das Problem. Weg führt zutypings
Ordner (in dem alle Eingaben gespeichert sind).Um Typisierungen zu installieren, müssen Sie eine
typings.json
Datei im Stammverzeichnis Ihres Projekts mit folgendem Inhalt erstellen :Und ausführen
typings install
(wotypings
ist das NPM-Paket).quelle
In meinem Fall bestand die Lösung darin, das
typeRoots
in meinem zu entfernentsconfig.json
.Wie Sie im TypeScript-Dokument lesen können
quelle
Ich bin auf dem neuesten Stand von heute und habe den besten Weg gefunden, dies zu beheben, indem ich nichts tue ... nein
typeRoots
neintypes
neinexclude
neininclude
alle Standardeinstellungen scheinen einwandfrei zu funktionieren. Eigentlich hat es bei mir nicht richtig funktioniert, bis ich sie alle entfernt habe. Ich hatte:aber das ist in den Standardeinstellungen, also habe ich das entfernt.
Ich hatte:
um eine Compiler-Warnung zu überwinden. Aber jetzt habe ich das auch entfernt.
Die Warnung, die nicht sein sollte, ist:
error TS2304: Cannot find name 'AsyncIterable'.
vonnode_modules\@types\graphql\subscription\subscribe.d.ts
Das ist sehr widerlich, also habe ich das in tsconfig gemacht, damit es geladen wird:
da es im esnext set ist. Ich benutze es nicht direkt, also mache ich mir hier noch keine Sorgen um die Kompatibilität. Hoffe das verbrennt mich später nicht.
quelle
"types": ["node"]
in ,tsconfig.json
aber Sie sollten diese Art in hinzufügentsconfig.app.json
! Sie sollten diese Warnung nicht noch einmal haben, denke ich. Du könntest behalten"target": "es5"
oder"target": "es6"
jetzt.Musste nur Folgendes tun, um @types in einem Lerna Mono-Repo aufzunehmen, in dem mehrere node_modules existieren.
Dann in jeder tsconfig.file jedes Moduls oder jeder App
quelle
Damit TypeScript Compiler während der Kompilierung alle sichtbaren Typdefinitionen verwenden kann,
types
sollte die Option vollständig aus demcompilerOptions
Feld in entfernt werdentsconfig.json
Datei entfernt werden.Dieses Problem tritt auf, wenn einige
types
Einträge imcompilerOptions
Feld vorhanden sind, in denen gleichzeitig einjest
Eintrag fehlt.Um das Problem zu beheben, sollte das
compilerOptions
Feld in Ihrem Feldtscongfig.json
entwederjest
in dentypes
Bereich aufgenommen odertypes
vollständig entfernt werden:quelle
google map types
dietypes
Option. Nachdem die Option vollständig entfernt wurde, funktionierte sie einwandfrei.Ich füge nur Antwort für das hinzu, was für mich in "Typoskript" funktioniert: "3.2.4" Ich habe festgestellt, dass Jasmin in node_modules / @ types einen Ordner für ts3.1 unter dem Jasmin-Typ hat. Hier sind die Schritte: -
npm install -D @types/jasmine
Zu tsconfig.json hinzufügen jasmine / ts3.1
"typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],
Fügen Sie Jasmin zu den Typen hinzu
"types": [ "jasmine", "node" ],
Hinweis: Dies ist
import 'jasmine';
nicht mehrerforderlich.quelle
In meinem Fall wurde dieser Fehler beim Bereitstellen der App angezeigt, nicht beim Testen. Ich wusste nicht, dass ich in meiner Datei tsconfig.app.json eine andere Konfigurationseinstellung hatte.
Ich hatte vorher das:
Es enthielt alle meine
.spec.ts
Dateien, wenn die App bereitgestellt wurde. Ich habe dasinclude property to
Ausschließen geändert und einen regulären Ausdruck hinzugefügt, um alle Testdateien wie folgt auszuschließen:Jetzt funktioniert es wie erwartet.
quelle
Schauen Sie sich den Import an, vielleicht haben Sie eine Zyklusabhängigkeit . Dies war in meinem Fall der Fehler. Mit
import {} from 'jasmine';
wird der Fehler in der Konsole behoben und der Code kompilierbar gemacht, aber die Wurzel des Teufels wird nicht entfernt (in meinem Fall die Zyklusabhängigkeit).quelle
Ich arbeite mit Angular 6, Typescript 2.7, und verwende das Jest-Framework für Unit-Tests. Ich hatte innen
@types/jest
installiert und hinzugefügttypeRoots
tsconfig.json
Habe aber immer noch den Anzeigefehler unten (dh: am Terminal gibt es keine Fehler)
Und den Import hinzufügen:
macht technisch nichts, also dachte ich, dass es irgendwo einen Import gibt, der dieses Problem verursacht, dann habe ich festgestellt, dass wenn die Datei gelöscht wird
in dem
src/
Ordner, löste das Problem für mich. As @types wird zuvor in die rootTypes importiert.Ich empfehle Ihnen, dasselbe zu tun und diese Datei zu löschen. Es ist keine erforderliche Konfiguration enthalten. (ps: wenn du im selben Fall bist wie ich)
quelle
Wenn sich der Fehler in der .specs-Datei app / app.component.spec.ts (7,3) befindet: Fehler TS2304: Der Name 'beforeEach' wurde nicht gefunden.
Fügen Sie dies oben in Ihre Datei ein und installieren Sie npm rxjs
{range} aus 'rxjs' importieren; {map, filter} aus 'rxjs / operator' importieren;
quelle