Saya mengikuti tutorial ini dari angular.io
Seperti yang mereka katakan, saya telah membuat file hero.spec.ts untuk membuat tes unit:
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);
});
});
Tes Unit bekerja seperti pesona. Masalahnya adalah: Saya melihat beberapa kesalahan, yang disebutkan dalam tutorial:
Editor dan kompiler kami mungkin mengeluh bahwa mereka tidak tahu apa itu
it
danexpect
karena mereka kekurangan file pengetikan yang menggambarkan Jasmine. Kita dapat mengabaikan keluhan yang menjengkelkan itu untuk saat ini karena tidak berbahaya.
Dan mereka memang mengabaikannya. Meskipun kesalahan itu tidak berbahaya, itu tidak terlihat baik di konsol output saya ketika saya menerima banyak dari mereka.
Contoh dari apa yang saya dapatkan:
Tidak dapat menemukan nama 'jelaskan'.
Tidak dapat menemukan nama 'itu'.
Tidak dapat menemukan nama 'harap'.
Apa yang bisa saya lakukan untuk memperbaikinya?
sumber
Jawaban:
Saya harap Anda sudah menginstal -
Kemudian masukkan impor berikut di bagian atas
hero.spec.ts
file -Itu harus menyelesaikan masalah.
sumber
@types/[email protected]
. Kalau tidak, Anda mungkin melihat kesalahan kompilasi ini .import 'jasmine';
import {} from 'jasmine';
sebenarnya dilakukan? Apakah sama denganimport 'jasmine'
?Dengan [email protected] atau yang lebih baru Anda dapat menginstal tipe dengan:
Kemudian impor jenis secara otomatis menggunakan
types
opsi ditsconfig.json
:Solusi ini tidak diperlukan
import {} from 'jasmine';
di setiap file spesifikasi.sumber
"types": ["jasmine"]
baris lagi. "Secara default semua paket" @types "yang terlihat termasuk dalam kompilasi Anda. Paket dalam node_modules / @ jenis folder penutup dianggap terlihat; secara khusus, itu berarti paket dalam ./node_modules/@types/, ../node_modules/@ types /, ../../node_modules/@types/, dan seterusnya. "node
danjasmine
tipe tidak terdeteksi. Setidaknya itu tidak berfungsi untuk saya dan saya menggunakan [email protected]ang-app/e2e/tsconfig.json
. Saya mencobanya di setiap level json . Bisakah Anda menambahkan lebih banyak detail?Seperti disebutkan dalam beberapa komentar yang
"types": ["jasmine"]
tidak diperlukan lagi, semua@types
paket secara otomatis dimasukkan dalam kompilasi (sejak v2.1 saya pikir).Menurut pendapat saya solusi termudah adalah dengan mengecualikan file tes di tsconfig.json Anda seperti:
Ini bekerja untuk saya.
Informasi lebih lanjut dalam dokumen resmi tsconfig .
sumber
src/tsconfig.app.json
,src/tsconfig.spec.json
dantsconfig.json
. Bagian "kecualikan" yang disebutkan adalah bagian dari yang pertama."types": [ "jasmine" ]
bagian ke-2.exclude
blok.exclude
blok tsconfig . Kemudian saya membuattsconfig.build.json
file baru dengan pola file spec ditambahkan keexclude
blok. Sekarang, dalamts-loader
opsi saya (di webpack.config) saya menggunakantsconfig.build.json
. Dengan konfigurasi ini, modul sedang diselesaikan dalam file uji dan saat membuat build atau memulai server, file uji dikecualikan.Anda perlu menginstal pengetikan untuk melati. Dengan asumsi Anda berada pada versi naskah 2 yang relatif baru, Anda seharusnya dapat melakukannya:
sumber
Dengan [email protected] atau yang lebih baru Anda dapat menginstal jenis dengan instal npm
kemudian mengimpor jenis otomatis menggunakan typeRoots pilihan di tsconfig.json.
Solusi ini tidak memerlukan impor {} dari 'jasmine'; di setiap file spesifikasi.
sumber
Solusi untuk masalah ini terhubung dengan apa yang telah ditulis @Pace dalam jawabannya. Namun, itu tidak menjelaskan semuanya jadi, jika Anda tidak keberatan, saya akan menulisnya sendiri.
LARUTAN:
Menambahkan baris ini:
di awal
hero.spec.ts
masalah perbaikan file. Path mengarah ketypings
folder (tempat semua mengetik disimpan).Untuk menginstal pengetikan, Anda perlu membuat
typings.json
file di root proyek Anda dengan konten berikut:Dan jalankan
typings install
(di manatypings
paket NPM).sumber
Dalam kasus saya, solusinya adalah menghapus
typeRoots
di sayatsconfig.json
.Seperti yang dapat Anda baca di dokumen TypeScript
sumber
Saya sedang mengerjakan yang terbaru hari ini dan menemukan cara terbaik untuk menyelesaikannya adalah tidak melakukan apa-apa ...
typeRoots
tidak,types
tidak,exclude
tidak,include
semua standarnya tampaknya berfungsi dengan baik. Sebenarnya itu tidak berhasil bagi saya sampai saya menghapus semuanya. Saya punya:tapi itu di default jadi saya menghapusnya.
Saya punya:
untuk melewati beberapa peringatan kompiler. Tapi sekarang saya menghapusnya juga.
Peringatan yang tidak seharusnya adalah:
error TS2304: Cannot find name 'AsyncIterable'.
fromnode_modules\@types\graphql\subscription\subscribe.d.ts
yang sangat menjengkelkan jadi saya melakukan ini di tsconfig sehingga memuatnya:
karena itu di set esnext. Saya tidak menggunakannya secara langsung sehingga belum ada kekhawatiran tentang kompatibilitas dulu. Semoga itu tidak membakar saya nanti.
sumber
"types": ["node"]
ditsconfig.json
tetapi Anda harus menambahkan jenis ini ditsconfig.app.json
! Anda seharusnya tidak memiliki peringatan ini lagi, saya pikir. Anda bisa tetap"target": "es5"
atau"target": "es6"
sekarang.Hanya harus melakukan yang berikut untuk mengambil @types di Lerna Mono-repo di mana beberapa node_modules ada.
Kemudian di setiap file tsconfig.f setiap modul atau aplikasi
sumber
Agar Compiler TypeScript menggunakan semua Definisi Jenis yang terlihat selama kompilasi,
types
opsi harus dihapus sepenuhnya daricompilerOptions
bidang dalamtsconfig.json
file.Masalah ini muncul ketika ada beberapa
types
entri dicompilerOptions
bidang, di mana pada saat yang samajest
entri hilang.Jadi untuk memperbaiki masalah,
compilerOptions
bidang di Andatscongfig.json
harus termasukjest
ditypes
area atau singkirkantypes
sepenuhnya:sumber
google map types
ditypes
pilihan. Setelah menghapus opsi sepenuhnya, itu bekerja dengan baik.Saya hanya akan menambahkan Jawaban untuk apa yang berfungsi untuk saya di "naskah": "3.2.4" Saya menyadari bahwa melati di jenis node_modules / @ ada folder untuk ts3.1 di bawah jenis melati jadi inilah langkah-langkahnya: -
npm install -D @types/jasmine
Tambahkan ke tsconfig.json jasmine / ts3.1
"typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],
Tambahkan Jasmine ke jenis
"types": [ "jasmine", "node" ],
Catatan: Tidak perlu untuk ini
import 'jasmine';
lagi.sumber
Dalam kasus saya, saya mendapatkan kesalahan ini ketika saya melayani aplikasi, bukan saat pengujian. Saya tidak menyadari bahwa saya memiliki pengaturan konfigurasi yang berbeda di file tsconfig.app.json saya.
Saya sebelumnya punya ini:
Itu termasuk semua
.spec.ts
file saya ketika melayani aplikasi. Saya mengubahinclude property to
exclude` dan menambahkan regex untuk mengecualikan semua file pengujian seperti ini:Sekarang berfungsi seperti yang diharapkan.
sumber
Lihatlah impor mungkin Anda memiliki ketergantungan siklus , ini dalam kasus saya kesalahan, menggunakan
import {} from 'jasmine';
akan memperbaiki kesalahan di konsol dan membuat kode dapat dikompilasi tetapi tidak menghilangkan akar setan (dalam kasus saya ketergantungan siklus).sumber
Saya menggunakan Angular 6, Typcript 2.7, dan saya menggunakan kerangka Jest untuk pengujian unit. Saya telah
@types/jest
menginstal dan menambahkan ditypeRoots
dalamnyatsconfig.json
Tetapi masih memiliki tampilan kesalahan di bawah ini (yaitu: pada terminal tidak ada kesalahan)
Dan menambahkan impor:
secara teknis tidak melakukan apa-apa, jadi saya pikir, bahwa ada impor di suatu tempat yang menyebabkan masalah ini, maka saya menemukan, bahwa jika menghapus file
di
src/
folder, memecahkan masalah untuk saya. Sebagai @types diimpor sebelum di dalam rootTypes.Saya sarankan Anda untuk melakukan hal yang sama dan menghapus file ini, tidak ada konfigurasi yang diperlukan di dalam. (ps: jika Anda berada dalam kasus yang sama dengan saya)
sumber
jika kesalahan ada di aplikasi file .specs / app.component.spec.ts (7,3): error TS2304: Tidak dapat menemukan nama 'sebelumEach'.
tambahkan ini ke atas file Anda dan instal rxjs
impor {range} dari 'rxjs'; impor {peta, filter} dari 'rxjs / operator';
sumber