web-dev-qa-db-ja.com

Jestを使用して単一のテストを実行する方法

ファイルfix-order-test.jsの中に「入れ子になった子で動作する」というテストがあります。

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

jest fix-order-test

単一のテストのみを実行する方法指定された正規表現のファイルを検索するので、以下は動作しません。

jest 'works with nested children'
201
vijayst

コマンドラインから--testNamePatternまたは-tフラグを使用してください

jest -t 'fix-order-test'

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

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

242

jestのドキュメント 以下を推奨します:

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

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

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

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

オプション1: /あなたのテスト名がユニークであるなら、あなたは監視モードの間にtを入力して、あなたが実行したいテストの名前を入力することができます。

オプション2:

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

上記のどちらの方法でも、Jestは指定したファイル内で単一のテストのみを実行します。 ????

31
Cory House

テストに集中したり除外したりするために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);
});
12
Nima Soroush

上記のように、あなたはコマンドを実行することができます

jest -t 'fix-order-test'

itブロックの中にdescribeがある場合は、実行する必要があります。

jest -t '<describeString> <itString>'
10

最新のjestバージョン では、次のいずれかを使用して1つのテストのみを実行できます。テストスイートも同様です。

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

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

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

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

7

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

コマンド:

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

  • <path-to-jest>
    • Windows: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. この方法では、実行中のスクリプトをデバッグできます。 debugging を有効にするには、コマンドに'--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

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

もう1つのオプションは、<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 blog )。

  2. Jestはnodeではなくbinary/CLIを介して実行されるため、この方法ではデバッグできません。

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

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

  • ${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. デバッグパネルで現在作成されている起動設定を選択します。

select launch config in the VSCode debug panel

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

select test name

  1. 'F5'ボタンを押してください。

そして、やあ!

今すぐあなたが望む任意のテストを実行するには、エディタでそれを開き、その名前を選択してF5を押します。

残念ながら、これはWindowsマシンでは「無効」にはならないでしょう。なぜなら、それらは${relativeFile}変数をパス で逆にした で置き換え、Jestがそのようなパスを理解できないからです。

備考

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

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を選択します。
  • そのテストを実行するには、緑色の矢印をクリックします。
2
Raymond Gan

これが私の考えです:

./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をすることができますが、これはコマンドラインでは便利です...(これはデバッグ設定のための良いスタートでも、どちらでも構いません IDE 使っています...)
  • プロジェクトには一連の設定オプションがない場合があります。しかし、もしそうなら(package.jsonの中のスクリプトを覗く)、これはあなたが必要とするものです。
  • --runInBand - 言ったように、あなたの設定については知りませんが、もしあなたが単一のテストを開発/修正することに集中すれば、あなたはむしろWebワーカーに対処したくないです...
  • はい、あなたはあなたのファイルへの完全な、明示的なパスを与えることができます
  • オプションで を指定すると、そのファイル内のすべてのテストを実行するのではなく、単一のテストのみを実行するために-tを使用できます(ここでは、名前にshow expandedを含むもの)。そのファイルに.only()を付け加えても同じ効果が得られます。
0
Frank Nocke

これでjest-watch-typeaheadと呼ばれるNice jestプラグイン ができました。これはこのプロセスをずっと簡単にします。

0
rivanov

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

npm test -- -t "fix order test"
0