2016-08-18 7 views
108

Obserwuję this tutorial from angular.iokątowe Testy 2 Jednostka: Nie można odnaleźć nazwy „opisać”

Jak mówili Utworzyłem plik hero.spec.ts do tworzenia testów jednostkowych:

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

Jednostka Testy działają jak urok. Problem polega na tym: Widzę pewne błędy, które są wymienione w poradniku:

Nasz edytor i kompilator może narzekać, że nie wiedzą co it i expect są z powodu braku pliki typowania, które opisują Jasmine . Możemy teraz zignorować te denerwujące skargi, ponieważ są one nieszkodliwe.

I rzeczywiście go zignorowali. Mimo że te błędy są nieszkodliwe, nie wygląda dobrze w mojej konsoli wyjściowej, gdy otrzymuję kilka z nich.

Przykład co otrzymuję:

nie można znaleźć nazwy 'opisać'.

Nie mogę znaleźć nazwy "to".

Nie można znaleźć nazwy "oczekiwać".

Co mogę zrobić, aby to naprawić?

+0

Możesz pobrać na Github, aby naprawić ten błąd: https://github.com/TypeStrong/atom-typescript/issues/1125 –

Odpowiedz

231

Mam nadzieję, że masz zainstalowane -

npm install --save-dev @types/jasmine

Następnie umieścić następującą import na początku pliku hero.spec.ts -

import {} from 'jasmine';

To powinno rozwiązać problem.

+0

Jeśli w Windows Powershell masz do zrobienia 'npm install --save-dev" @ types/jaśmin "' (zauważ podwójne cudzysłowy) lub zwróci błąd – aesede

+3

W zależności od wersji maszynopisu wymagane może być konieczne zainstalowanie wcześniejszej wersji. Na przykład dla jonowego v2.2.1, którego aktualnie używam, używającego maszynopisu v2.0.9, potrzebowałem zainstalować '@ types/jasmine @ 2.5.41'. W przeciwnym razie możesz zobaczyć [te błędy kompilacji] (https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14569). –

+8

Możesz po prostu zaimportować moduł dla swoich efektów ubocznych: 'import 'jaśmin';' – camolin3

10

Musisz zainstalować kody do jaśminu. Zakładając, że jesteś w stosunkowo niedawnej wersji maszynopisu 2 powinny być w stanie zrobić:

npm install --save-dev @types/jasmine

3

Rozwiązanie tego problemu jest połączony z co @Pace has written w swojej odpowiedzi. Jednak to nie wyjaśnia wszystkiego, więc jeśli nie masz nic przeciwko, napiszę to sam.

ROZWIĄZANIE:

Dodanie tej linii:

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

na początku hero.spec.ts pliku rozwiązuje problem. Ścieżka prowadzi do folderu typings (gdzie przechowywane są wszystkie typy).

Aby zainstalować typowania musisz utworzyć typings.json plik w katalogu głównym projektu o następującej treści:

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

I uruchomić typings install (gdzie typings jest pakiet NPM).

+2

jest to niestandardowy sposób robienia tego. Domyślne reguły tslint zapobiegają ścieżkom referencyjnym. użyj pliku tsconfig, aby wskazywać na node_modules – FlavorScape

95

Wpisując [email protected] lub nowszy można instalować typy z npm install @types/jasmine, a następnie importować typy automatycznie, korzystając z opcji types w tsconfig.json. To rozwiązanie nie wymaga import {} from 'jasmine'; w każdym pliku specyfikacji.

+4

Dla dokumentów TypeScript dla tsconfig.json (v2.1 w tym czasie), nie jest konieczne dodawanie "typów": ["jaśmin"] linia już. "Domyślnie wszystkie pakiety" @types "są widoczne w twojej kompilacji, paczki w module node_modules/@ typy folderów zamykających są uważane za widoczne, konkretnie oznacza to pakiety w ./node_modules/@types/, ../node_modules/@ types /, ../../node_modules/@types/, i tak dalej. " – bholben

+4

@bholben Wiem, ale z jakiegoś powodu typy "węzeł" i "jaśmin" nie są wykrywane. Przynajmniej to nie działa dla mnie i używam [email protected] –

+2

To rozwiązanie nie działa dla mnie :(, przepraszam, użyłem go w 'ang-app/e2e/tsconfig.json'. to na każdym poziomie jsonów.Możesz dodać więcej szczegółów? – Sergii

13
npm install @types/jasmine 

Jak wspomniano w niektórych uwagach "types": ["jasmine"] nie jest już potrzebny, wszystkie @types pakiety są automatycznie uwzględniane w kompilacji (od v2.1 myślę).

Moim zdaniem najprostszym rozwiązaniem jest, aby wykluczyć pliki testowe w swoim tsconfig.json jak:

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

Działa to dla mnie.

Dalsze informacje w oficjalnej wersji tsconfig docs.

+3

po prostu notka: nowe projekty Angular mają 'src/tsconfig.app.json',' src/tsconfig.spec.json' i 'tsconfig.json'. wspomniana sekcja "wyklucz" jest częścią pierwszej. "" typy ": [" jaśmin "]' część 2. –

+0

to mi nie pasowało – fidev

+0

Zauważ, że w Kodzie VS tracisz możliwość odnajdywania referencji w pliki specyfikacji, ponieważ nie będą one uważane za część Projektu. – mleu

2

Z [email protected] lub później można zainstalować typy z KMP zainstalować

npm install --save-dev @types/jasmine 

następnie zaimportować rodzaje automatycznie za pomocą typeRoots opcję w tsconfig.json.

To rozwiązanie nie wymaga importu {} z "jaśminu"; w każdym pliku specyfikacji.

1

jestem do najnowszych od dzisiaj i okazało się, że najlepszym sposobem, aby rozwiązać ten problem jest nie robić nic ... no typeRoots nie types nie exclude żadnych include wszystkie domyślne wydaje się działać dobrze. Właściwie to nie działało dobrze dla mnie, dopóki ich nie usunąłem. Miałem: "exclude": [ "node_modules" ] ale to w domyślnych ustawieniach, więc usunąłem to.

Posiadałem: "types": [ "node" ] , aby wyprzedzić ostrzeżenie o kompilatorze. Ale teraz też to usunąłem.

Ostrzeżenie, że nie powinno być to: error TS2304: Cannot find name 'AsyncIterable'. z node_modules\@types\graphql\subscription\subscribe.d.ts

co jest bardzo nieprzyjemny, więc zrobiłem to w tsconfig tak że ładuje go: "compilerOptions": { "target": "esnext", } ponieważ jest w zestawie esnext. Nie używam go bezpośrednio, więc nie martw się jeszcze o kompatybilność. Mam nadzieję, że nie spali mnie to później.

2

W moim przypadku rozwiązaniem było usunięcie typeRoots w moim tsconfig.json.

Jak można przeczytać w TypeScript doc

Jeśli typeRoots jest określony tylko pakiety pod typeRoots zostaną uwzględnione.

0

Spójrz na import może masz zależność cyklu, to było w moim przypadku błędu, używając import {} from 'jasmine'; będzie naprawić błędy w konsoli i dokonać compilable kod, ale nie usuwa korzeń diabła (w w moim przypadku zależność od cyklu).

Powiązane problemy