Jestを使用して単一のテストを実行するにはどうすればよいですか?


355

fix-order-test.jsファイル内に「ネストされた子で動作する」テストがあります。

以下を実行すると、ファイル内のすべてのテストが実行されます。

jest fix-order-test

単一のテストのみを実行するにはどうすればよいですか?以下は、指定された正規表現のファイルを検索するため機能しません。

jest 'works with nested children'


おそらくnpmを介してjestコマンドラインを使用しているため、--testNamePattern 'works with nested children' Jest CLIオプション#testNamePatternを
steven87vt

@BioGenX:リンクが壊れています
Dan Dascalescu

回答:


428

コマンドラインから--testNamePatternor -tフラグを使用します

jest -t 'fix-order-test'

これは、指定したテスト名パターンに一致するテストのみを実行します。それはJest docsにあります。

もう1つの方法は、監視モードでテストを実行しjest --watch、を押しpて、テストファイル名を入力してテストをフィルタリングするかt、単一のテスト名を実行することです。


あなたが持っている場合itの内部describeブロックを、あなたが実行する必要が

jest -t '<describeString> <itString>'

-tの認識されないオプションを取得しています。はい、ドキュメントにはそれが記載されています。このフラグは16.0で追加されました。最新バージョンです。jest -helpがフラグについて言及していないようです。ありがとう。
vijayst 2017

12
これは、it()関数内の特定のテスト名のテストパターンであり、ファイル名ではありません。それは私が思ったことです。
HussienK 2018年

70
npmテストを使用する場合は、行う必要がありますnpm test -- -t "fix order test"
Sarsaparilla

3
これは私にとってはうまくいきますが、プロジェクト内の他のすべてのテストもスキップするため、大規模なプロジェクトでは遅くなります。:本当に助けにテストがあることを特定のテストファイルを指定する./node_modules/.bin/jest --config=./.jest.config.json ./src/x/y/sites.js/sitesWorker.test.js -t 'given only incorrect sites'
anon58192932

<describeString>を指定せずに動作しますが、モカのgrep(-g 'searchString')よりも速度が遅いことに気づきました(-g 'searchString')-取ります:-)
schmoopy

125

Jestのドキュメントでは、次のことを推奨しています。

テストが失敗した場合、最初に確認することの1つは、実行されている唯一のテストであるときにテストが失敗しているかどうかです。Jestでは、1つのテストのみを実行するのは簡単です。一時的にそのtest コマンドをtest.only

test.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

または

it.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

7
jest 20.0.4で動作します。ただし、そのファイルの残りのテストはスキップされます。実行を1つのファイルに制限していない限り、他のファイルのテストは引き続き実行されます。
Holf

7
ただし、これは冗談です。テストを非同期で実行するため、最初からどのファイルでどのテストを実行するかを決定できません。したがって、デフォルトですべてのファイルが実行され、ファイル内でチェックされtest.onlyます。だから、あなただけが、残念ながらその1つのファイルを実行する必要があり、多くのファイルで構成されてテストケースのスイート内の多くのテストケースを持っているファイル内の一つのテストを実行したい場合はjest myTestFile.test.js
フレーク状の

@johnslay:あります、テストしただけです

@flaky私はそれが実行されているときに動作しないと言うつもりだったと思いnpm testます。ファイルを単独で実行するか、を押しpてフィルターを設定する必要があります。
johnslay 2018年

3
@johnslayよく、あなたの応答を書く前に前のコメントを読んでくれてありがとう/ sと思う:)
不安定な

55

他の回答で述べたようにtest.only、同じファイル内の他のテストを除外するだけです。したがって、他のファイルのテストは引き続き実行されます。

したがって、単一のテストを実行するには、2つの方法があります。

  • オプション1:テスト名が一意の場合はt、監視モードで入力して、実行するテストの名前を入力できます。

  • オプション2:

    1. ヒットpウォッチモードでは、あなたが実行したいファイル名の正規表現を入力するようにしています。(このような関連コマンドは、Jestを監視モードで実行すると表示されます)。
    2. 実行するテストitit.onlyに変更します。

上記のいずれの方法でも、Jestは指定したファイルで単一のテストのみを実行します。


54

単一のJestテストを実行するための完全なコマンド

コマンド:

node <path-to-jest> -i <you-test-file> -c <jest-config> -t "<test-block-name>"

  • <path-to-jest>
    • ウィンドウズ: node_modules\jest\bin\jest.js
    • その他: node_modules/.bin/jest
  • -i <you-test-file>:テストを含むファイルへのパス(jsまたはts
  • -c <jest-config>:別のJest構成ファイル(JSON)へのパス。Jest構成を保持している場合、package.jsonこのパラメーターを指定する必要はありません(Jestはユーザーの助けなしにそれを見つけます)
  • -t <the-name-of-test-block>:実際には、名前(最初のパラメータ)のだdescribe(...)it(...)またはtest(...)ブロック。

例:

describe("math tests", () => {

  it("1 + 1 = 2", () => {
    expect(1 + 1).toBe(2);
  });

  it("-1 * -1 !== -1", () => {
    expect(-1 * -1).not.toBe(-1);
  });

});

したがって、コマンド

node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t "1 + 1 = 2"

はテストしit("1 + 1 = 2", ...)ますが、-tパラメーターをに変更すると"math tests"describe("math tests",...)ブロックから両方のテストが実行されます。

備考:

  1. Windowsの場合置き換えるnode_modules/.bin/jestnode_modules\jest\bin\jest.js
  2. このアプローチでは、実行中のスクリプトをデバッグできます。デバッグを有効にする'--inspect-brk'には、コマンドにパラメーターを追加します。

'package.json'のNPMスクリプトを介して単一のJestテストを実行する

Jestをインストールすると、NPMスクリプトを使用して、このコマンドの構文(上記)を簡略化できます。中には、"package.json"新しいスクリプトを追加"scripts"セクション:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t \"math tests\"",
}

この場合、'jest'フルパスではなくエイリアスを使用します。また、設定ファイルのパスも指定しないでください"package.json"。Jestはデフォルトでこのファイルを確認することができます。これでコマンドを実行できます:

npm run test:math

そして"math tests"二つの試験でのブロックが実行されます。または、もちろん、特定のテストを名前で指定することもできます。

別のオプションは<the-name-of-test-block>"test:math"スクリプトの外にパラメーターをプルし、それをNPMコマンドから渡すことです。

package.json:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t",
}

コマンド:

npm run test:math "math tests"

これで、はるかに短いコマンドで実行テストの名前を管理できます。

備考:

  1. 'jest'コマンドがあるためNPMスクリプトで動作します

    npm"./node_modules/.bin"PATHライフサイクルスクリプトを実行するときに環境変数に最初のエントリを作成するため、プログラムがグローバルにインストールされていなくても、これは正常に機能します(NPMブログ

  2. Jestは経由ではなく、バイナリ/ CLI経由で実行されるため、このアプローチではデバッグができないようですnode

Visual Studio Codeで選択したJestテストを実行する

Visual Studio Codeを使用している場合は、それを利用して、F5ボタンを押すことで(コードエディターで)現在選択されているテストを実行できます。これを行うには、ファイルに新しい起動構成ブロックを作成する必要があり".vscode/launch.json"ます。その構成では、実行時に適切な(残念ながら常にではない)値で置き換えられる定義済み変数を使用します。利用可能なすべてのうち、私たちはこれらにのみ興味があります:

  • ${relativeFile} -現在開いているファイル ${workspaceFolder}
  • ${selectedText} -アクティブなファイルで現在選択されているテキスト

しかし、起動設定を書き込む前に、'test'スクリプトを追加する必要があります'package.json'(まだない場合)。

package.json:

"scripts": {
  "test": "jest"
}

その後、起動構成で使用できます。

起動構成:

{
  "type": "node",
  "request": "launch",
  "name": "Run selected Jest test",
  "runtimeExecutable": "npm",
  "runtimeArgs": [
    "run-script",
    "test"
  ],
  "args": [
    "--",
    "-i",
    "${relativeFile}",
    "-t",
    "${selectedText}"
  ],
  "console": "integratedTerminal",
}

実際には、この回答の前半で説明したコマンドと同じです。すべての準備が整ったので、コマンドパラメータを手動で書き直すことなく、必要なテストを実行できます。

ここにあなたがする必要があるすべてがあります:

  1. デバッグパネルで現在作成されている起動構成を選択します。

VSCodeデバッグパネルで起動構成を選択します

  1. コードエディターでテストを含むファイルを開き、テストするテストの名前(引用符なし)を選択します。

テスト名を選択

  1. 'F5'ボタンを押します。

そして出来上がり!

必要なテストを実行するには、エディターでテストを開き、その名前を選択してF5キーを押します。

残念ながら、Windowsマシンでは${relativeFile}変数が(理由を知っている)逆スラッシュのパスに置き換えられ、Jestはそのようなパスを理解できないため、Windowsマシンでは「出来上がり」にはなりません。

備考:

  1. デバッガーの下で実行するには、'--inspect-brk'パラメーターを追加することを忘れないでください。
  2. この設定例では、Jest設定パラメーターはに含まれていると想定していません'package.json'

1
優秀な!これは受け入れられる答えになるはずです。特にnpx、OSに関係なく、Jestの呼び出しを大幅に簡略化するために、
Dan Dascalescu

19

fまたはxを使用して、テストを集中または除外することもできます。例えば

fit('only this test will run', () => {
   expect(true).toBe(false);
});

it('this test will not run', () => {
   expect(true).toBe(false);
});

xit('this test will be ignored', () => {
   expect(true).toBe(false);
});

1
なぜこの回答が反対票を投じられたのかわからない、それは質問に答えて機能するようです。
mbillard

1
xit私のために働いたが、fitしなかった。私はjest@22.4.4を使用しています。
Hinrich

fit私にとってはjest@23.1.0で動作します。
jcubic

このアプローチの主な欠点は、1つのテストをドリルダウンしてバグを修正しようとしているだけの場合、基礎となるテストファイルに不要な変更が加えられることだと思います。なんらかの理由で、テストコードを(たとえば、コミット間で)維持したい場合、これは理にかなっています。
webelo 2018

f1つのファイル内でのみ機能します。
セルゲイ

14

上記のように、コマンドを実行できます

jest -t 'fix-order-test'

あなたが持っている場合itの内部describeブロックを、あなたが実行する必要が

jest -t '<describeString> <itString>'

13

jestようなスクリプトコマンドとして実行している場合npm testは、次のコマンドを使用して機能させる必要があります。

npm test -- -t "fix order test"

8

最新の冗談バージョンは、テストスイートのための1つのテストのみを実行するには、次の、同じのいずれかを使用することができます。

it.only('test 1', () => {})

test.only('test 1', () => {})

fit('test 1', () => {})

jest 'test 1' テスト名が一意の場合も機能する可能性があります。


4

VS Codeでは、これにより、ブレークポイントを使用して1つのJestテストのみを実行/デバッグできます:https : //github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests

launch.jsonはこれを持っています:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Jest All",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["--runInBand"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Jest Current File",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["${relativeFile}"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    }
  ]
}

そしてこれはpackage.json

  "scripts": {
    "test": "jest"
  }
  • 1つのテストを実行するには、そのテストでtest(またはit)をtest.only(またはit.only)に変更します。1つのテストスイート(複数のテスト)を実行するには、に変更describedescribe.onlyます。
  • 必要に応じてブレークポイントを設定します。
  • VSコードで、デバッグビューに移動します(Shift + Cmd + D)。
  • 上部のドロップダウンメニューから、を選択しJest Current Fileます。
  • 緑の矢印をクリックして、そのテストを実行します。

私の場合、構成は1つのテストのみ(it.only(...)で)を実行しますが、ブレークポイントで停止しません:(
Tudor Leustean

JavaScriptがデバッガーのブレークポイントにヒットするようにするのは、その非同期の性質のため、注意が必要です。VS Codeで、ブレークポイントを配置する場所と、[デバッグ]メニューのコマンドがヒットするまで操作します。ブレークポイントをスキップし続ける場合は、それらをコードのEARLIERに配置してください。1つのファイルが別のファイルの関数を呼び出す場合は、その関数呼び出しにブレークポイントを設定してから、ジャンプファイルへの呼び出しを「ステップイン」します。次のデバッグコマンドを試してください:「ステップオーバー、ステップイン、ステップアウト、続行」
Raymond Gan

実際には、のパラメータでフルパスを指定"scripts": { "test": "jest" }しているpackage.jsonので、必要はありません 。"program"launch.json
セルゲイ

3

これが私の見解です:

./node_modules/.bin/jest --config test/jest-unit-config.json --runInBand src/components/OpenForm/OpenForm.spec.js -t 'show expanded'

ノート:

  • ./node_modules/.bin/...ローカルにインストールされたパッケージに付属しているローカルにインストールされたjest(またはmochaまたは...)バイナリにアクセスするための素晴らしい方法です。(はい、npmスクリプトでjestはこれまでに何もする必要はありませんが、これはコマンドラインで便利です...
  • プロジェクトに構成オプションのセットがない場合があります。しかし、それが可能であれば(のスクリプトをのぞいてみてくださいpackage.json)、これが必要です。
  • --runInBand –言われたように、あなたの設定についてはわかりませんが、単一のテストの開発/修正に集中する場合は、むしろWebワーカーに対処したくないでしょう...
  • はい、あなたはあなたのファイルへの完全な、明示的なパスを与えることができます
  • オプションで-tそのファイル内のすべてのテストを実行するのではなく、1つのテストのみを実行するために使用できます(ここshow expandedでは、名前に' ' が含まれるものを1つだけ)。.only()そのファイルに接着することで同じ効果を得ることができます。

3

ほんの少しのアドオンです。使用する./node_modules/.bin/jest -i ...か、jest -i ...それともnpm test -- -i ...

  1. ただ呼び出すjestあなたは、それは、(NPM -g冗談をインストールする場合と同様に)グローバルの依存関係を処理するようにきれいではない道をインストールしている場合は作品を
  2. jestがパッケージのローカルにのみインストールされていて、npmスクリプトを迂回せずにjestスクリプトを呼び出したい場合は、npx jest -i ...=> を使用できます。これがnpxの目的です。書くことからあなたを救います./node_modules/.bin/...


0
npm run test -- test-name

これは、テスト仕様名が一意である場合にのみ機能します。上記のコードは参照します

この名前のファイル: test-name.component.spec.ts

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.