Açısal 2 Birim Testleri: 'description' adı bulunamıyor


213

Bu öğreticiyi angular.io sitesinden takip ediyorum

Dedikleri gibi, birim testleri oluşturmak için hero.spec.ts dosyası oluşturdum:

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

Birim Testleri bir cazibe gibi çalışır. Sorun: Ben öğretici belirtilen bazı hatalar görüyorum:

Bizim editörü ve derleyici onlar ne bilmiyorum şikayet edebilir it ve expectbunlar Jasmine'i tarif yazarak dosyaları yoksun çünkü bulunmaktadır. Zararsız oldukları için rahatsız edici şikayetleri şimdilik göz ardı edebiliriz.

Gerçekten de görmezden geldiler. Bu hatalar zararsız olsa da, bir sürü aldığımda çıkış konsolumda iyi görünmüyor.

Aldığım örnek:

'Description' adı bulunamıyor.

'İt' adı bulunamıyor.

'Bekleme' adı bulunamıyor.

Düzeltmek için ne yapabilirim?


Bu hatayı düzeltmek için Github'a oy verebilirsiniz: github.com/TypeStrong/atom-typescript/issues/1125
Lucas Cimon

Yanıtlar:


386

Umarım yüklediniz -

npm install --save-dev @types/jasmine

Ardından, aşağıdaki içe aktarmayı hero.spec.tsdosyanın üstüne yerleştirin -

import 'jasmine';

Sorunu çözmeli.


3
Gerekli Typescript sürümüne bağlı olarak, daha eski bir sürüm yüklemeniz gerekebilir. Örneğin şu anda kullanmakta olduğum ionic v2.2.1 için typescript v2.0.9 kullanan, yüklemem gerekiyor @types/jasmine@2.5.41. Aksi takdirde bu derleme hatalarını görebilirsiniz .
Tony O'Hagan

18
Modülü sadece yan etkileri için içe aktarabilirsiniz:import 'jasmine';
camolin3

8
import {} from 'jasmine';Aslında ne yapar ? İle aynı import 'jasmine'mı?
TetraDev

2
ANGULAR IN 6.0.3: Ben sadece "ithalat {} yasemin" ithal ve tekrar çalıştı
Eduardo Cordeiro

2
@aesede Hangi PS sürümünü kullanıyorsunuz? Komutu hiç tırnak işareti olmadan yürüttüm ve iyi gitti.
Konrad Viltersten

162

Typescript@2.0 veya daha yeni bir sürümle türleri kurabilirsiniz:

npm install -D @types/jasmine

Ardından, aşağıdaki typesseçeneği kullanarak türleri otomatik olarak içe aktarın tsconfig.json:

"types": ["jasmine"],

Bu çözüm import {} from 'jasmine';her spec dosyasında gerektirmez .


9
Tsconfig.json (şu anda v2.1) için TypeScript dokümanlarına göre, "types": ["jasmine"]artık satır eklemek gerekli değildir . "Varsayılan olarak tüm görünür" @types "paketleri derlemenize dahil edilir. Herhangi bir çevreleyen klasörün node_modules / @ türündeki paketler görünür kabul edilir; özellikle ./node_modules/@types/, ../node_modules/@ içindeki paketler anlamına gelir. türleri /, ../../node_modules/@types/, vb. "
bholben

12
@bholben biliyorum, ama bazı nedenlerden dolayı nodeve jasminetürleri tespit edilmedi. En azından benim için çalışmıyor ve Typescript@2.1.5
Jiayi Hu

2
Bu çözüm benim için çalışmıyor :(, özür dilerim. Onu kullandım ang-app/e2e/tsconfig.json. Her json seviyesinde denedim . Lütfen daha fazla ayrıntı ekler misiniz?
Sergii

Bu, webpack'i kullanırken işe yaramaz - bu durumda gerçek kütüphanenin sunulması gerekir - 'yasemin'ten içe aktarma {} kütüphaneyi zorlar
Bogdan

Bu benim için çalıştı, ama aynı zamanda benim küresel daktilo 3.5.3 (2.5'ten) yükseltmek zorunda kaldı
jsaddwater

27
npm install @types/jasmine

Bazı yorumlarda belirtildiği gibi "types": ["jasmine"], artık gerekli değildir, hepsi@types paketler otomatik olarak derlemeye dahil edilir (sanırım v2.1'den beri).

Bence en kolay çözüm tsconfig.json dosyasındaki test dosyalarını hariç tutmaktır :

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

Bu benim için çalışıyor.

Resmi tsconfig belgelerinde daha fazla bilgi .


3
Sadece bir not: Yeni Açısal projeler var src/tsconfig.app.json, src/tsconfig.spec.jsonve tsconfig.json. Bahsedilen "hariç tut" bölümü ilk bölümün bir parçasıdır. "types": [ "jasmine" ]2. bölümü.
Martin Schneider

2
VS Kodunda, projenizin bir parçası olarak değerlendirilmeyecekleri için spesifikasyon dosyalarınızda referans bulma yeteneğinizi kaybettiğinizi unutmayın.
mleu

@mleu Aynı sorunla karşı karşıyayım. Bu sorunu nasıl çözdünüz? Test senaryosunu yazarken, spec dosya desenini excludebloktan kaldırmam gerekiyor .
Shishir Anshuman

@ShishirAnshuman: Bir çözüm bulamadım ve proje bitene kadar bu sınırlama ile yaşamak zorunda kaldım.
mleu

@mleu Oh. Hiçbir sorun. Geçici çözüm olarak projemde, tsconfig excludebloğundan spec dosya desenini kaldırdım . Sonra bloğa tsconfig.build.jsonspec dosya deseni ile yeni bir dosya oluşturdum exclude. Şimdi, ts-loaderseçeneklerimde (webpack.config dosyasında) kullanıyorum tsconfig.build.json. Bu yapılandırmalarla modüller test dosyalarında çözümlenir ve derleme oluşturulurken veya sunucuyu başlatırken test dosyaları hariç tutulur.
Shishir Anshuman

13

Yasemin için yazımlar yüklemeniz gerekiyor. Daktilo yazısının nispeten yeni bir sürümünde olduğunuzu varsayarsak, şunları yapabilirsiniz:

npm install --save-dev @types/jasmine

8

Typescript@2.0 veya üzeri bir sürümle npm kurulumuyla türleri kurabilirsiniz

npm install --save-dev @types/jasmine

ardından tsconfig.json'daki typeRoots seçeneğini kullanarak türleri otomatik olarak içe aktarın .

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

Bu çözüm 'yasemin'ten ithal {} gerektirmez; her spec dosyasında.


1
Ne yazık ki bu işe yaramıyor. Hala spec dosyalarındaki hataları gösterir
dave0688

3

Bu sorunun çözümü @Pace'in cevabında yazdıklarıyla bağlantılıdır . Ancak, her şeyi açıklamıyor, bu yüzden sakıncası yoksa, kendim yazacağım.

ÇÖZÜM:

Bu satırı ekliyor:

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

hero.spec.tsdosya başında sorunu giderir. Yol typingsklasöre yönlendirir (tüm yazımların depolandığı yer).

Yazıları yüklemek için typings.json, projenizin kök dizininde aşağıdaki içerikle dosya oluşturmanız gerekir :

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

Ve çalıştırın typings install( typingsNPM paketi nerede ).


3
bunu yapmanın standart olmayan bir yolu. varsayılan tslint kuralları referans yollarını engeller. node_modules'ü işaret etmek için tsconfig dosyasını kullanın
FlavorScape

3

Benim durumumda, çözüm typeRootsbenimtsconfig.json .

TypeScript belgesinde okuyabileceğiniz gibi

TypeRoots belirtilirse, yalnızca typeRoots altındaki paketler dahil edilir.


3

Bugün itibariyle en son sürümdeyim ve bunu çözmenin en iyi yolunu buldum hiçbir şey yapmamak ... typeRootshayır typeshayır excludehayır includetüm varsayılanlar gayet iyi çalışıyor gibi görünüyor. Aslında hepsini kaldırana kadar benim için işe yaramadı. Sahiptim:

"exclude": [
    "node_modules"
]

ama bu öntanımlıdır, bu yüzden bunu kaldırdım.

Sahiptim:

"types": [
    "node"
]

derleyici uyarısı geçmiş olsun. Ama şimdi ben de kaldırdım.

Olmaması gereken uyarı: error TS2304: Cannot find name 'AsyncIterable'. dannode_modules\@types\graphql\subscription\subscribe.d.ts

ki çok iğrenç bu yüzden tsconfig bunu yükler bunu yaptım:

"compilerOptions": {
    "target": "esnext",
}

çünkü esnext setinde. Doğrudan kullanmıyorum, bu yüzden henüz uyumluluk konusunda endişelenmenize gerek yok. Umarım bu beni daha sonra yakmaz.


Eklemenize gerek yok "types": ["node"], tsconfig.jsonancak bu türü eklemelisiniz tsconfig.app.json! Yine bu uyarıyı almamalısın bence. Saklayabilirsin "target": "es5"ya da "target": "es6"şimdi.
Christophe Chevalier

2

Sadece birkaç node_modülün bulunduğu bir Lerna Mono- repo'da @tipleri almak için aşağıdakileri yapmak zorundaydı .

npm install -D @types/jasmine

Daha sonra her bir modül veya uygulamanın her tsconfig.file dosyasında

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

Varsayılan olarak tüm görünür “@types” paketleri derlemenize dahildir. Herhangi bir kapatma klasörünün node_modules / @ türündeki paketler görünür kabul edilir; özellikle, bu ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/, ve içindeki paketler anlamına gelir. Resmi belgelere
Christophe Chevalier

1

TypeScript Derleyicinin derleme sırasında görünür tüm Tip Tanımlarını kullanabilmesi için, typesseçeneğin compilerOptionsalandaki alandan tamamen kaldırılması gerekir .tsconfig.json dosyadaki .

Bu sorun , aynı anda bazı typesgirişler olduğunda ortaya çıkar.compilerOptionsjest girdinin eksik .

Yani sorunu çözmek amacıyla, compilerOptionssenin alan tscongfig.jsonya içermelidir jestiçinde typesveya alan kurtulmak typescomnpletely:

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

Bu benim için çalıştı google map types, typesseçenek vardı . Seçeneği tamamen çıkardıktan sonra iyi çalıştı.
pritesh agrawal

1

Ben sadece "typescript" benim için işe yarayan cevap ekleyeceğim: "3.2.4" Ben node_modules / @ türlerinde yasemin yasemin türü altında ts3.1 için bir klasör olduğunu fark ettim, bu yüzden adımlar şunlardır: -

  • Yasemin türü yükleyin npm install -D @types/jasmine
  • Ekle tsconfig.json yasemin / ts3.1

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

  • Jasmine türlerine ekle

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

Not: Artık buna gerekimport 'jasmine';yok.


1

Benim durumumda, test ederken değil, uygulamayı sunarken bu hatayı alıyordum. Tsconfig.app.json dosyamda farklı bir yapılandırma ayarım olduğunu fark etmedim.

Daha önce bu vardı:

{
  ...
  "include": [
    "src/**/*.ts"
  ]
}

.spec.tsUygulamayı sunarken tüm dosyalarımı içeriyordu. include property toDışlama`yı değiştirdim ve bunun gibi tüm test dosyalarını hariç tutmak için bir normal ifade ekledim:

{
  ...
  "exclude": [
    "**/*.spec.ts",
    "**/__mocks__"
  ]
}

Şimdi beklendiği gibi çalışıyor.


0

İthalat bakmak bir döngü bağımlılığı var belki , bu benim durumumda hata, kullanarak import {} from 'jasmine';konsoldaki hataları düzeltir ve kodu derlenebilir yapar ama şeytanın kökünü kaldırmaz (benim durumumda döngü bağımlılığı).


0

Angular 6, Typescript 2.7 kullanıyorum ve birim testi için Jest framework kullanıyorum. Ben vardı @types/jestyüklenmiş ve ilavetypeRootstsconfig.json

Ancak yine de aşağıdaki ekran hatası var (yani: terminalde hata yok)

isim bulamıyorum tarif

Ve içe aktarmayı ekleyerek:

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

Teknik olarak hiçbir şey yapmaz, bu yüzden bu soruna neden olan bir yerde bir ithalat olduğunu düşündüm, sonra dosyayı silerseniz

tsconfig.spec.json

içinde src/ klasörün benim için sorun çözüldü. @ Tipleri daha önce rootTypes içine alınır.

Aynı dosyayı yapmanızı ve bu dosyayı silmenizi tavsiye ederim, içeride gerekli yapılandırma yok. (ps: benimle aynı durumdaysanız)


0

hata .specs app / app.component.spec.ts (7,3) dosyasındaysa: hata TS2304: 'beforeEach' adı bulunamıyor.

bunu dosyanızın üstüne ekleyin ve npm install rxjs

'rxjs' den {range} dosyasını içe aktarın; 'rxjs / operators' öğesinden {map, filter} içe aktarma;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.