フォローしています このチュートリアルは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
がJasmineを記述するタイピングファイルを持っていないので、彼らが何であるかを知らないと不平を言うかもしれません。私達はそれらが無害であるので今のところそれらの迷惑な不平を無視することができる。
そして彼らは確かにそれを無視しました。たとえそれらのエラーが無害であったとしても、私がそれらのたくさんを受け取ったときそれは私の出力コンソールには良く見えません。
私が得たものの例:
'describe'という名前が見つかりません。
'it'という名前が見つかりません。
'expect'という名前が見つかりません。
修正するにはどうすればよいですか。
インストールしていただければ幸いです -
npm install --save-dev @types/jasmine
それからhero.spec.ts
ファイルの一番上に次のインポートを置きます -
import 'jasmine';
それは問題を解決するはずです。
[email protected]以降では、次のようにして型をインストールできます。
npm install -D @types/jasmine
それからtsconfig.json
のtypes
オプションを使って型を自動的にインポートします。
"types": ["jasmine"],
このソリューションでは、各specファイルにimport {} from 'jasmine';
は必要ありません。
npm install @types/jasmine
いくつかのコメントで述べたように、"types": ["jasmine"]
はもう必要ではなく、すべての@types
パッケージは自動的にコンパイルに含まれます(v2.1以降だと思います)。
私の意見では、最も簡単な解決策は tsconfig.json のようにテストファイルを除外することです。
"exclude": [
"node_modules",
"**/*.spec.ts"
]
これは私のために働きます。
公式の tsconfig docs に詳しい情報があります。
あなたはjasmineのためにタイピングをインストールする必要があります。比較的最近のバージョンのTypeScript 2を使用していると仮定すると、次のことができるはずです。
npm install --save-dev @types/jasmine
[email protected]以降では、npm installで型をインストールできます。
npm install --save-dev @types/jasmine
次に、tsconfig.jsonの typeRoots オプションを使用して型を自動的にインポートします。
"typeRoots": [
"node_modules/@types"
],
この解決法は 'jasmine'からのimport {}を必要としません。各specファイルにあります。
私は今日の時点で最新のものであり、これを解決する最善の方法は何もしないことであることを発見しました... 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",
}
それは、次のセットに入っているからです。直接使用していないので、互換性についてはまだ心配していません。それが後で私を焼かないことを願っています。
この問題の解決策は、 @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パッケージです)。
私の場合、解決策は私のtsconfig.json
のtypeRoots
を削除することでした。
TypeRootsが指定されている場合は、typeRootsの下のパッケージのみが含まれます。
いくつかのnode_moduleが存在する Lerna Mono-repo で@typeをピックアップするためには、以下を実行するだけで済みました。
npm install -D @types/jasmine
その後、各モジュールまたはアプリの各tsconfig.fileに
"typeRoots": [
"node_modules/@types",
"../../node_modules/@types" <-- I added this line
],
私はAngular 6、TypeScript 2.7を使っていて、単体テストにはJestフレームワークを使っています。 @types/jest
をtsconfig.json
内のtypeRoots
にインストールして追加しました
しかし、それでも以下のような表示エラーがあります(つまり、端末にはエラーはありません)。
名前の説明が見つかりません
そしてインポートを追加します。
import {} from 'jest'; // in my case or jasmine if you're using jasmine
技術的には何もしていないので、どこかにこの問題を引き起こすインポートがあると私は思いました、そして私は、ファイルを削除すれば
tsconfig.spec.json
src/
フォルダで、問題を解決しました。 @typesはrootTypesの中に入る前にインポートされるので。
私はあなたに同じことをしてこのファイルを削除することを勧めます、必要な設定は内部にありません。 (ps:私と同じ場合)
インポートを見てください/多分あなたは サイクル依存 、これは私の場合はエラーだった、import {} from 'jasmine';
を使用してコンソール内のエラーを修正し、コードをコンパイル可能にします。依存)。
TypeScript Compilerがコンパイル中にすべての可視型定義を使用するためには、types
オプションをtsconfig.json
ファイルのcompilerOptions
フィールドから完全に削除する必要があります。
この問題は、types
項目にcompilerOptions
項目がいくつか存在し、同時にjest
項目が欠落している場合に発生します。
それで問題を解決するために、あなたのtscongfig.json
のcompilerOptions
フィールドは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"
]
}
私は "TypeScript"で私のために働くもののための答えを追加します。
npm install -D @types/jasmine
Tsconfig.jsonに追加するjasmine/ts3.1
"typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],
型にJasmineを追加する
"types": [ "jasmine", "node" ],
注: このimport 'jasmine';
はもう必要ありません。