単一のテストファイルの実行


138

ng testテストスイート全体ではなく単一のファイルに対して実行する方法はありますか?理想的には、ファイルを編集しているときにできるだけ早くフィードバックループを取得したいのですkarmaが、保存ごとにスイート全体を実行します。これは、十分に大きなテストスイートを構築すると少し遅くなります。


これは、angular-cli1つのテスト仕様のみを実行する方法とは異なります。その質問は、個々の仕様の実行に関するものです。これは、個々のファイルを実行することです。ソリューションには同じJasmine仕様機能が含まれていますが、質問の性質は少し異なります。



あなたはここで答えを見つけることができます。stackoverflow.com/questions/40683673/...
サヒールShikalgar

あなたはここで答えを見つけることができます。stackoverflow.com/questions/40683673/...
サヒールShikalgar

回答:


261

Jasmineでは、プレフィックスdescribeitメソッドにf(フォーカスのために?)を付けることができることがわかりました。だから、fdescribeそしてfit。これらのいずれかを使用する場合、karmaは関連するテストのみを実行します。したがって、現在のファイルにフォーカスするには、最上位を取得してにdescribe変更するだけfdescribeです。私の目的のために動作します。


9
伝説の答え
danday74

2
そのような重要な機能がもっと明白で簡単ではないとは信じられません。
アッシュ

10
これは機能しますが、ソースコードを変更する必要があり、変更されたコードをソース管理でチェックインしてしまう可能性があるため、理想的ではありません。
マルコアルティエリ2018年

4
可能であれば、公式ドキュメントへのリンクを追加してください
jgpATs2w '28

私はこれを検索してきました、素晴らしい
カルロスE

26

それはあなたがでコメントすることなく、特定のテストを無効にすることができますことを言及する価値だxdescribexit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

そして、誰かのように、すでにあなたには、いくつかのテストに集中したい場合は、その後言ったfdescribefit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

25

これは最近のincludeオプションで実現できます。 https://angular.io/cli/test#options

これはグロブ一致なので、例として:

ng test --include='**/someFolder/*.spec.ts'

8.1.0のリリースノートには記載されていませんが、@ Swooxは、これがcliバージョン以降の機能であることを以下で説明しています8.1.0。それを理解してくれてありがとう。


1
これは最近のアップデートのようです。必要なバージョンを含めたい場合があります。CLI 8.1が必要です。
1

v9.1で削除されるようです:(
rmcsharry

2
これをCLI v9.1.0でテストしたところ、問題なく動作しました。
Sajjan Singh

9

単一のファイル、特定のディレクトリ、または一連のファイルに対してテストを実行できるようにするために使用できるng test追加のオプションが--includeあることがわかりました。

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

ng cli docs


Angular 9-削除されたようです
rmcsharry

いいえ、それはNG 9にまだ使用可能です
tephyr

6

src/test.ts次の行に移動して変更できます。

const context = require.context('./', true, /\.spec\.ts$/);

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

enter image description here


1
厳密に言えば、これを行う方法に関するほとんどの質問で、fitとfdescribeを使用して問題を解決していますが、これは最も正しい答えのように聞こえます。Karmaには、これをより簡単に実現するためのgitの問題があります:github.com/karma-runner/karma/issues/1507。理想的には、単純ではありませんが、1つのテストに変更を加え、ブラウザーでそれをクリックするだけで更新で再実行できるようにKarmaを構成できます。
pumpkinthehead



0

行かなければならずsrc/test.ts、次の行番号コード18を変更できます。

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

enter image description here


-3

specファイルをパラメーターとして指定すると機能します。

例えば:

ng test foo.spec.ts

お役に立てれば。


4
使用しているバージョンを指定できますか?1.7.xで動作しない
FrEaKmAn

4
それも私にとってはうまくいきませんでした。しかし、スペックファイルへのパスの前に--mainオプションを使用するように変更しました。スラッシュを含む絶対パスを使用しました。相対パスを試していません。Angular 6を使用しています。それが最善の解決策かどうかはわかりませんが、私にとってはうまくいくようです。
user2367418
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.