Jestテストを順次実行する方法は?


140

を介してJestテストを実行していnpm testます。Jestはデフォルトで並行してテストを実行します。テストを順番に実行する方法はありますか?

現在の作業ディレクトリの変更に依存するサードパーティのコードを呼び出すテストがいくつかあります。

回答:


220

CLIオプションは文書化されており、コマンドを実行してアクセスすることもできますjest --help

探しているオプションが表示されます--runInBand


5
どうもありがとう!ですよnpm test --runInBandね?オフトピック:「バンド」という名前の由来は不明。--runSequentiallyはおそらくもっと理にかなっています:)
Martin Konicek

13
@MartinKonicek npm test -- --runInBandは正しいです。
OndrejSlinták2017

40
残念ながら、実行順序を制御できないという事実により、Jestは統合テストにはほとんど役に立ちません。
エヴァンB.

19
@Evanテストを特定の順序で実行する必要があるという事実は匂いです。
Nico Van Belle

18
@NicoVanBelleこれは、十分に複雑なステートフルシステムの真のエンドツーエンドのテストに対して支払う価格です。私は代替案を受け入れていますが、スタックの重要な部分を単純に交換することも、テスト間でデータベースのリセットを極端に遅くすることも含まない解決策はまだ見ていません。Jestが悪いツールであることを意味するのではなく、この特定の種類のテストにとっては間違ったツールです。
エヴァンB.

17

私はまだJestに慣れていますが、ブロックの記述は同期的に実行されるのに対し、テストブロックは非同期的に実行されるようです。次のような外部記述内で複数の記述ブロックを実行しています。

describe
    describe
        test1
        test2

    describe
        test3

この場合、は、を含む記述ブロックに続く記述ブロック内にあるため、完了test3するまで実行されません。test2test3test2


1
多分それはまだ並行して実行されます。
LCB、

これは素晴らしい。最初に環境変数が欠落している場合の動作を確認し、次に変数を設定してさらにテストを行うことができます。
Attaque

14

それは私にうまく分離されたモジュールテストの連続した実行を保証するために働きました:

1)テストを別々のファイルに保存しますがspec/test、名前は付けません。

|__testsToRunSequentially.test.js
|__tests
   |__testSuite1.js
   |__testSuite2.js
   |__index.js

2)テストスイートを含むファイルも次のようになります(testSuite1.js)。

export const testSuite1 = () => describe(/*your suite inside*/)

3)それらをインポートしてtestToRunSequentially.test.js実行--runInBand

import { testSuite1, testSuite2 } from './tests'

describe('sequentially run tests', () => {
   testSuite1()
   testSuite2()
})

すでに2つのテストスイートがあるため、-runInBandで実行する必要はありません。子テストスイートは順番に実行されます。
RICKY KUMAR

10

シリアルテストランナーを使用します。

npm install jest-serial-runner --save-dev

jest.config.jsなどで、jestを使用するように設定します。

module.exports = {
   ...,
   runner: 'jest-serial-runner'
};

プロジェクト機能を使用して、テストのサブセットにのみ適用することができます。https://jestjs.io/docs/en/configuration#projects-arraystring--projectconfigを参照してください


プロジェクト機能を使用して、テストのサブセットのみに使用することができます。、 どうやって?
Nux

1
@Nux Jestの「プロジェクト」構成設定では、他の構成設定を特定のテストセットに選択的に適用できます。回答がドキュメントと例へのリンクで更新されました。
Joachim Lous

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