web-dev-qa-db-ja.com

Angular 2単体テスト:名前「describe」が見つかりません

フォローしています このチュートリアルは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);
  });
});

単体テストは魅力のように機能します。問題は次のとおりです。チュートリアルで説明されているエラーがいくつかあります。

私たちの編集者とコンパイラは、itexpectがJasmineを記述するタイピングファイルを持っていないので、彼らが何であるかを知らないと不平を言うかもしれません。私達はそれらが無害であるので今のところそれらの迷惑な不平を無視することができる。

そして彼らは確かにそれを無視しました。たとえそれらのエラーが無害であったとしても、私がそれらのたくさんを受け取ったときそれは私の出力コンソールには良く見えません。

私が得たものの例:

'describe'という名前が見つかりません。

'it'という名前が見つかりません。

'expect'という名前が見つかりません。

修正するにはどうすればよいですか。

177
Piotrek

インストールしていただければ幸いです -

npm install --save-dev @types/jasmine

それからhero.spec.tsファイルの一番上に次のインポートを置きます -

import 'jasmine';

それは問題を解決するはずです。

348
ksharifbd

[email protected]以降では、次のようにして型をインストールできます。

npm install -D @types/jasmine

それからtsconfig.jsontypesオプションを使って型を自動的にインポートします。

"types": ["jasmine"],

このソリューションでは、各specファイルにimport {} from 'jasmine';は必要ありません。

142
Jiayi Hu
npm install @types/jasmine

いくつかのコメントで述べたように、"types": ["jasmine"]はもう必要ではなく、すべての@typesパッケージは自動的にコンパイルに含まれます(v2.1以降だと思います)。

私の意見では、最も簡単な解決策は tsconfig.json のようにテストファイルを除外することです。

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

これは私のために働きます。

公式の tsconfig docs に詳しい情報があります。

24
lenny

あなたはjasmineのためにタイピングをインストールする必要があります。比較的最近のバージョンのTypeScript 2を使用していると仮定すると、次のことができるはずです。

npm install --save-dev @types/jasmine
13
Pace

[email protected]以降では、npm installで型をインストールできます。

npm install --save-dev @types/jasmine

次に、tsconfig.jsonの typeRoots オプションを使用して型を自動的にインポートします。

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

この解決法は 'jasmine'からのimport {}を必要としません。各specファイルにあります。

7
mvermand

私は今日の時点で最新のものであり、これを解決する最善の方法は何もしないことであることを発見しました... no typeRoots no types no exclude no includeすべてのデフォルトは問題なく動作しているようです。実際に、それらをすべて削除するまで、私にとってはうまくいきませんでした。私は持っていました:

"exclude": [
    "node_modules"
]

しかし、それはデフォルトにあるので、私はそれを削除しました。

私は持っていました:

"types": [
    "node"
]

コンパイラの警告を乗り越えるために。しかし今、私もそれを取り除きました。

あるべきではないという警告はerror TS2304: Cannot find name 'AsyncIterable'.からnode_modules\@types\graphql\subscription\subscribe.d.tsです

これは非常に厄介なので、私はそれがそれをロードするようにtsconfigでこれをしました:

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

それは、次のセットに入っているからです。直接使用していないので、互換性についてはまだ心配していません。それが後で私を焼かないことを願っています。

3
philn5d

この問題の解決策は、 @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はNPMパッケージです)。

3
Piotrek

私の場合、解決策は私のtsconfig.jsontypeRootsを削除することでした。

TypeScriptのドキュメントで読むことができるように

TypeRootsが指定されている場合は、typeRootsの下のパッケージのみが含まれます。

3
moppag

いくつかのnode_moduleが存在する Lerna Mono-repo で@typeをピックアップするためには、以下を実行するだけで済みました。

npm install -D @types/jasmine

その後、各モジュールまたはアプリの各tsconfig.fileに

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

私はAngular 6、TypeScript 2.7を使っていて、単体テストにはJestフレームワークを使っています。 @types/jesttsconfig.json内のtypeRootsにインストールして追加しました

しかし、それでも以下のような表示エラーがあります(つまり、端末にはエラーはありません)。

名前の説明が見つかりません

そしてインポートを追加します。

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

技術的には何もしていないので、どこかにこの問題を引き起こすインポートがあると私は思いました、そして私は、ファイルを削除すれば

tsconfig.spec.json

src/フォルダで、問題を解決しました。 @typesはrootTypesの中に入る前にインポートされるので。

私はあなたに同じことをしてこのファイルを削除することを勧めます、必要な設定は内部にありません。 (ps:私と同じ場合)

0
getName

インポートを見てください/多分あなたは サイクル依存 、これは私の場合はエラーだった、import {} from 'jasmine';を使用してコンソール内のエラーを修正し、コードをコンパイル可能にします。依存)。

0
G.Vitelli

TypeScript Compilerがコンパイル中にすべての可視型定義を使用するためには、typesオプションをtsconfig.jsonファイルのcompilerOptionsフィールドから完全に削除する必要があります。

この問題は、types項目にcompilerOptions項目がいくつか存在し、同時にjest項目が欠落している場合に発生します。

それで問題を解決するために、あなたのtscongfig.jsoncompilerOptionsフィールドはjest領域にtypesを含めるか、またはtypesを完全に取り除くべきです:

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

私は "TypeScript"で私のために働くもののための答えを追加します。

  • インストールの種類jasmine npm install -D @types/jasmine
  • Tsconfig.jsonに追加するjasmine/ts3.1

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

  • 型にJasmineを追加する

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

注: このimport 'jasmine';はもう必要ありません。

0
Eslam Mahgoub