कोणीय 2 यूनिट टेस्ट: 'वर्णन' नाम नहीं मिल सकता है


213

मैं इस ट्यूटोरियल को angular.io से फॉलो कर रहा हूं

जैसा कि उन्होंने कहा, मैंने यूनिट परीक्षण बनाने के लिए Hero.spec.ts फ़ाइल बनाई है:

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

यूनिट टेस्ट एक आकर्षण की तरह काम करते हैं। समस्या यह है: मुझे कुछ त्रुटियां दिखाई देती हैं, जिनका उल्लेख ट्यूटोरियल में किया गया है:

हमारे संपादक और संकलक शिकायत कर सकते हैं कि वे नहीं जानते कि क्या हैं it और expectइसलिए कि उनके पास जैस्मीन का वर्णन करने वाली टाइपिंग फ़ाइलों की कमी है। हम उन कष्टप्रद शिकायतों को अनदेखा कर सकते हैं क्योंकि वे हानिरहित हैं।

और उन्होंने वास्तव में इसे नजरअंदाज कर दिया। भले ही वे त्रुटियां हानिरहित हों, लेकिन जब मैं उनमें से गुच्छा प्राप्त करता हूं तो यह मेरे आउटपुट कंसोल में अच्छा नहीं लगता।

मुझे क्या मिलेगा इसका उदाहरण:

'वर्णन' नाम नहीं मिल रहा है।

'यह' नाम नहीं मिल सकता।

'उम्मीद' नाम नहीं मिल सकता।

इसे ठीक करने के लिए मुझे क्या करना होगा?


आप इस बग को ठीक करने के लिए गितुब पर उत्थान कर सकते हैं: github.com/TypeStrong/atom-typescript/issues/1125
Lucas Cimon

जवाबों:


386

मुझे आशा है कि आपने स्थापित किया है -

npm install --save-dev @types/jasmine

फिर hero.spec.tsफ़ाइल के शीर्ष पर निम्नलिखित आयात करें -

import 'jasmine';

यह समस्या को हल करना चाहिए।


3
टाइपस्क्रिप्ट के संस्करण के आधार पर आपको पहले वाला संस्करण स्थापित करने की आवश्यकता हो सकती है। उदाहरण के लिए ईओण v2.2.1 के लिए कि मैं वर्तमान में टाइपस्क्रिप्ट v2.0.9 का उपयोग करता हूं, मुझे स्थापित करने की आवश्यकता है @types/jasmine@2.5.41। अन्यथा आप इन संकलन त्रुटियों को देख सकते हैं
टोनी ओ'हागन

18
आप इसके दुष्प्रभावों के लिए मॉड्यूल का आयात कर सकते हैं:import 'jasmine';
कैमोलिन 3

8
import {} from 'jasmine';वास्तव में क्या करता है? क्या यह वैसा ही है import 'jasmine'?
तेतरादेव

2
ANGULAR 6.0.3 में: मैंने सिर्फ "आयात {} चमेली से" आयात किया था और इसने फिर से काम किया
एडुआर्डो कॉर्डियारो

2
@aesede आप पीएस का कौन सा संस्करण चलाते हैं? मैंने बिना किसी उद्धरण चिह्नों के केवल कमांड को निष्पादित किया और यह अच्छी तरह से चला गया।
कोनराड विल्टर्स्टन

162

Typescript@2.0 या बाद में आप इसके साथ प्रकार स्थापित कर सकते हैं:

npm install -D @types/jasmine

फिर typesविकल्प का उपयोग करके स्वचालित रूप से आयात करें tsconfig.json:

"types": ["jasmine"],

यह समाधान import {} from 'jasmine';प्रत्येक कल्पना फ़ाइल में आवश्यकता नहीं है ।


9
Tsconfig.json (इस समय v2.1) के लिए प्रति टाइपस्क्रिप्ट डॉक्स, "types": ["jasmine"]अब लाइन जोड़ने के लिए आवश्यक नहीं है। "डिफ़ॉल्ट रूप से सभी दृश्यमान" @types "संकुल को आपके संकलन में शामिल किया गया है। किसी भी संलग्नक फ़ोल्डर के नोड_मॉड्यूल्स / @ प्रकार के पैकेजों को दृश्यमान माना जाता है; विशेष रूप से, इसका अर्थ है कि पैकेज ./node_modules/@todes/, ../node_modules/@ के भीतर। प्रकार /, ../../node_modules/@types/, और इसी तरह। "
bholben

12
@ भोलबेन को मैं जानता हूं, लेकिन कुछ कारणों nodeऔर jasmineप्रकारों का पता नहीं चला है। कम से कम यह मेरे लिए काम नहीं करता है और मैं Typecript@2.1.5
Jiayi Hu

2
यह समाधान मेरे लिए काम नहीं करता है :(, क्षमा करें। मैंने इसका उपयोग किया ang-app/e2e/tsconfig.jsonमैंने इसे हर स्तर पर आज़माया । क्या आप अधिक विवरण जोड़ सकते हैं?
सर्गि

वेबपैक का उपयोग करते समय यह काम नहीं करेगा - इस मामले में वास्तविक पुस्तकालय को सेवा देने की आवश्यकता है - 'चमेली' से आयात {} के माध्यम से पुस्तकालय को धक्का देता है
बोगदान

यह मेरे लिए काम करता है, लेकिन मुझे अपनी वैश्विक टाइपस्क्रिप्ट को 3.5.3 (2.5 से) तक अपग्रेड करना है
jsaddwater

27
npm install @types/jasmine

जैसा कि कुछ टिप्पणियों में उल्लेख किया गया "types": ["jasmine"]है, अब ज़रूरत नहीं है, सभी @typesपैकेज स्वचालित रूप से संकलन में शामिल हैं (v2.1 के बाद से मुझे लगता है)।

मेरी राय में अपने tsconfig.json में परीक्षण फ़ाइलों को बाहर करने के लिए सबसे आसान उपाय है :

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

यह मेरे लिए काम करता है।

आधिकारिक tsconfig डॉक्स में आगे की जानकारी ।


3
बस एक नोट: नई कोणीय परियोजनाएं हैं src/tsconfig.app.json, src/tsconfig.spec.jsonऔर tsconfig.json। उल्लिखित "बहिष्कृत" खंड 1 का हिस्सा है। "types": [ "jasmine" ]2 का हिस्सा।
मार्टिन श्नाइडर

2
ध्यान दें कि वीएस कोड में आप अपनी कल्पना फाइलों में संदर्भ खोजने की क्षमता खो देते हैं, क्योंकि वे परियोजना का हिस्सा नहीं माने जाएंगे।
मल्लू

@mleu मैं उसी समस्या का सामना कर रहा हूं। आपने इस मुद्दे को कैसे ठीक किया? हर बार टेस्ट केस लिखते समय, मुझे excludeब्लॉक से स्पेक फाइल पैटर्न को हटाना होगा ।
शिशिर अंशुमन

@ शिशिरअनशुमान: मुझे कोई हल नहीं मिला और परियोजना समाप्त होने तक इस सीमा के साथ रहना पड़ा।
मलेउ

@mleu ओह। कोई समस्या नहीं। मेरे प्रोजेक्ट में वर्कअराउंड के रूप में, मैंने tsconfig के excludeब्लॉक से कल्पना फ़ाइल पैटर्न को हटा दिया । फिर मैंने ब्लॉक में tsconfig.build.jsonजोड़े गए विशेष फ़ाइल पैटर्न के साथ एक नई फ़ाइल बनाई exclude। अब, मेरे ts-loaderविकल्पों में (webpack.config में) मैं उपयोग कर रहा हूं tsconfig.build.json। इन कॉन्फ़िगरेशनों के साथ, मॉड्यूल परीक्षण फ़ाइलों में हल किए जा रहे हैं और बिल्ड बनाते समय या सर्वर शुरू करते समय, परीक्षण फ़ाइलों को बाहर रखा गया है।
शिशिर अंशुमन

13

आपको चमेली के लिए टाइपिंग स्थापित करने की आवश्यकता है। मान लें कि आप टाइपस्क्रिप्ट 2 के अपेक्षाकृत हाल के संस्करण पर हैं जो आपको करने में सक्षम होना चाहिए:

npm install --save-dev @types/jasmine

8

Typescript@2.0 के साथ या बाद में आप npm स्थापित के साथ प्रकार स्थापित कर सकते हैं

npm install --save-dev @types/jasmine

उसके बाद tsconfig.json में typeRoots विकल्प का उपयोग करके स्वचालित रूप से आयात करें ।

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

इस समाधान में 'चमेली' से आयात {} की आवश्यकता नहीं है; प्रत्येक कल्पना फ़ाइल में।


1
दुर्भाग्य से यह काम नहीं करता है। यह अभी भी कल्पना फाइलों में त्रुटियों को दिखाता है
dave0688

3

इस समस्या का समाधान @Pace ने अपने उत्तर में लिखा है। हालाँकि, यह सब कुछ नहीं समझाता है, अगर आपको कोई आपत्ति नहीं है, तो मैं इसे खुद लिखूंगा।

उपाय:

इस पंक्ति को जोड़ना:

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

hero.spec.tsफ़ाइल की शुरुआत में समस्या को ठीक करता है। पथ typingsफ़ोल्डर की ओर जाता है (जहां सभी टाइपिंग संग्रहीत हैं)।

टाइपिंग को स्थापित करने के लिए आपको typings.jsonनिम्नलिखित सामग्री के साथ अपने प्रोजेक्ट के रूट में फ़ाइल बनाने की आवश्यकता है:

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

और चलाएं typings install(जहां typingsएनपीएम पैकेज है)।


3
यह ऐसा करने का गैर-मानक तरीका है। डिफ़ॉल्ट tslint नियम संदर्भ पथ को रोकेंगे। ns_modules को इंगित करने के लिए tsconfig फ़ाइल का उपयोग करें
फ्लेवरस्केप

3

मेरे मामले में, समाधान typeRootsमेरे अंदर निकालने के लिए था tsconfig.json

जैसा कि आप टाइपस्क्रिप्ट डॉक्टर में पढ़ सकते हैं

यदि टाइपरूट निर्दिष्ट है, तो टाइप टाइप के तहत केवल पैकेज शामिल किए जाएंगे।


3

मैं आज तक नवीनतम हूं और इसे हल करने का सबसे अच्छा तरीका कुछ भी नहीं करना है ... नहीं typeRootsनहीं typesनहीं excludeनहीं, includeसभी चूक ठीक काम कर रही हैं। वास्तव में यह मेरे लिए सही काम नहीं किया जब तक कि मैंने उन सभी को हटा नहीं दिया। मैं था:

"exclude": [
    "node_modules"
]

लेकिन यह चूक में है इसलिए मैंने उसे हटा दिया।

मैं था:

"types": [
    "node"
]

पिछले कुछ संकलक चेतावनी पाने के लिए। लेकिन अब मैंने वो भी हटा दिया।

चेतावनी जो नहीं होनी चाहिए: error TS2304: Cannot find name 'AsyncIterable'. से हैnode_modules\@types\graphql\subscription\subscribe.d.ts

जो बहुत अप्रिय है इसलिए मैंने इसे tsconfig में किया ताकि यह इसे लोड करे:

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

के बाद से यह esnext सेट में है। मैं इसे सीधे उपयोग नहीं कर रहा हूँ, यहाँ अभी तक संगतता के बारे में कोई चिंता नहीं है। आशा है कि मुझे बाद में जला नहीं है।


आपको इसमें जोड़ने की आवश्यकता नहीं "types": ["node"]है tsconfig.jsonलेकिन आपको इस प्रकार को जोड़ना चाहिए tsconfig.app.json! मेरे विचार से आपको यह चेतावनी दोबारा नहीं देनी चाहिए। आप रख सकते हैं "target": "es5"या "target": "es6"अब।
क्रिस्टोफ शेवेलियर

2

केवल एक Lerna मोनो-रेपो में @types लेने के लिए निम्न कार्य करना था जहां कई नोड_मॉड्यूल्स मौजूद हैं।

npm install -D @types/jasmine

फिर प्रत्येक मॉड्यूल या ऐप के tsconfig.file में

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

डिफ़ॉल्ट रूप से सभी दृश्यमान "@types" पैकेज आपके संकलन में शामिल हैं। किसी भी संलग्नक फ़ोल्डर के नोड_मॉडल / @ प्रकार के पैकेज को दृश्यमान माना जाता है; विशेष रूप से, जिसका अर्थ है ./node_modules/@types/, ../node_modules/@types/, ../../node_modules/@types/, और इसी तरह के पैकेज। आधिकारिक दस्तावेज
क्रिस्टोफ़ शेवेलियर

1

संकलन के दौरान सभी दृश्य प्रकार परिभाषाओं का उपयोग करने के लिए टाइपस्क्रिप्ट कंपाइलर के लिए, typesविकल्प को फ़ाइल compilerOptionsमें फ़ील्ड से पूरी तरह से हटा दिया जाना चाहिए tsconfig.json

यह समस्या तब होती है जब फ़ील्ड typesमें कुछ प्रविष्टियाँ मौजूद होती हैं compilerOptions, जहाँ एक ही समय में jestप्रविष्टि गायब होती है।

तो आदेश समस्या को ठीक करने के लिए, compilerOptionsमें अपने क्षेत्र tscongfig.jsonया तो शामिल होना चाहिए jestमें typesया क्षेत्र से छुटकारा पाने के 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"
  ]
}

यह मेरे लिए काम किया, मैं था google map typesमें typesविकल्प। विकल्प को पूरी तरह से हटाने के बाद, यह ठीक काम किया।
प्रीतेश अग्रवाल 3

1

मैं सिर्फ "टाइपस्क्रिप्ट" में मेरे लिए क्या काम करता हूं, इसके लिए उत्तर जोड़ूंगा: "3.2.4" मुझे एहसास हुआ कि चमेली नोड_मॉड्यूल्स / @ प्रकार में चमेली प्रकार के तहत ts3.1 के लिए एक फ़ोल्डर है, इसलिए यहां चरण हैं: -

  • टाइप चमेली स्थापित करें npm install -D @types/jasmine
  • Tsconfig.json चमेली / ts3.1 में जोड़ें

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

  • जैस्मीन को प्रकारों में जोड़ें

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

नोट:import 'jasmine'; अब इसकेलिए कोई ज़रूरतनहीं है।


1

मेरे मामले में, मुझे यह त्रुटि तब हो रही थी जब मैं ऐप की सेवा कर रहा था, परीक्षण के समय नहीं। मुझे नहीं पता था कि मेरी tsconfig.app.json फ़ाइल में एक अलग कॉन्फ़िगरेशन सेटिंग है।

मैंने पहले यह किया था:

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

.spec.tsऐप को परोसते समय यह मेरी सभी फाइलों में शामिल था । मैंने include property toबहिष्करण को बदल दिया है और इस तरह सभी परीक्षण फ़ाइलों को बाहर करने के लिए एक regex जोड़ा है:

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

अब यह उम्मीद के मुताबिक काम करता है।


0

आयात को देखें हो सकता है कि आपके पास एक चक्र निर्भरता हो , यह मेरे मामले में त्रुटि थी, import {} from 'jasmine';कंसोल में त्रुटियों को ठीक करने और कोड को संकलित करने का उपयोग करेगा , लेकिन शैतान की जड़ को नहीं हटाता है (मेरे मामले में चक्र निर्भरता)।


0

मैं एंगुलर 6, टाइपस्क्रिप्ट 2.7 पर हूं, और मैं जेस्ट फ्रेमवर्क टू यूनिट टेस्ट का उपयोग कर रहा हूं। मैंने अंदर @types/jestस्थापित और जोड़ा थाtypeRootstsconfig.json

लेकिन अभी भी नीचे प्रदर्शन त्रुटि है (अर्थात: टर्मिनल पर कोई त्रुटि नहीं है)

नाम वर्णन नहीं मिल रहा है

और आयात जोड़ना:

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

तकनीकी रूप से कुछ भी नहीं करता है, इसलिए मैंने सोचा, कि इस समस्या का कारण कहीं न कहीं एक आयात है, तो मैंने पाया, कि यदि फ़ाइल को हटा दें

tsconfig.spec.json

में src/फ़ोल्डर, मेरे लिए समस्या हल हो। जैसा कि रूटटेप्स के अंदर @types आयात किया जाता है।

मैं आपको वही करने और इस फ़ाइल को हटाने की सलाह देता हूं, कोई आवश्यक कॉन्फ़िगरेशन अंदर नहीं है। (पीएस: यदि आप उसी मामले में हैं जैसे मैं हूं)


0

यदि त्रुटि .specs फ़ाइल ऐप / app.component.spec.ts (7,3) में है: त्रुटि TS2304: 'पहले' नाम नहीं ढूँढ सकता।

इसे अपनी फ़ाइल के शीर्ष पर जोड़ें और npm rxjs स्थापित करें

'rxjs' से आयात {रेंज}; 'rxjs / ऑपरेटर्स' से {map, फ़िल्टर} आयात करें;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.