Jest はデフォルトでテストスイートを並行して実行しますが、フラグ(--runInBand
)これにより、スイート全体を順番に実行できます(指摘 here )
並行して実行できないいくつかのテストがありますが、スイート全体を順番に実行すると全体でかなり長い時間がかかるため、私の質問は、そのようにsomeテストのみを実行する方法があるかどうかです(これらのテストまたは同様のものにフラグを設定するなど)。
私も同じ機能が必要でした。実行したいJest統合テストスイートの大規模なセットがあります。ただし、共有リソースのセットアップと破棄が必要なため、一部を並行して実行することはできません。だから、ここに私が思いついた解決策があります。
package.json
スクリプトを以下から更新しました:
{
...
"scripts": {
...
"test": "npm run test:unit && npm run test:integration",
"test:integration": "jest --config=__tests__/integration/jest.config.js",
"test:unit": "jest --config=__tests__/unit/jest.config.js"
},
...
}
に
{
...
"scripts": {
...
"test": "npm run test:unit && npm run test:integration",
"test:integration": "npm run test:integration:sequential && npm run test:integration:parallel",
"test:integration:parallel": "jest --config=__tests__/integration/jest.config.js",
"test:integration:sequential": "jest --config=__tests__/integration/jest.config.js --runInBand",
"test:unit": "jest --config=__tests__/unit/jest.config.js"
},
...
}
次に、__tests__/integration/jest.config.js
を更新しました
module.exports = {
// Note: rootDir is relative to the directory containing this file.
rootDir: './src',
setupFiles: [
'../setup.js',
],
testPathIgnorePatterns: [
...
],
};
に
const Path = require('path');
const { defaults } = require('jest-config');
const klawSync = require('klaw-sync')
const mm = require('micromatch');
// Note: rootDir is relative to the directory containing this file.
const rootDir = './src';
const { testMatch } = defaults;
// TODO: Add the paths to the test suites that need to be run
// sequentially to this array.
const sequentialTestPathMatchPatterns = [
'<rootDir>/TestSuite1ToRunSequentially.spec.js',
'<rootDir>/TestSuite2ToRunSequentially.spec.js',
...
];
const parallelTestPathIgnorePatterns = [
...
];
let testPathIgnorePatterns = [
...parallelTestPathIgnorePatterns,
...sequentialTestPathMatchPatterns,
];
const sequential = process.argv.includes('--runInBand');
if (sequential) {
const absRootDir = Path.resolve(__dirname, rootDir);
let filenames = klawSync(absRootDir, { nodir: true })
.map(file => file.path)
.map(file => file.replace(absRootDir, ''))
.map(file => file.replace(/\\/g, '/'))
.map(file => '<rootDir>' + file);
filenames = mm(filenames, testMatch);
testPathIgnorePatterns = mm.not(filenames, sequentialTestPathMatchPatterns);
}
module.exports = {
rootDir,
setupFiles: [
'../setup.js',
],
testMatch,
testPathIgnorePatterns,
};
更新されたjest.config.js
は、jest-config
、klaw-sync
、およびmicromatch
に依存します。
npm install --save-dev jest-config klaw-sync micromatch
これで、順次実行する必要があるテストのみを実行する場合は、npm run test:integration:sequential
を実行できます。
または、並列テストの場合はnpm run test:integration:parallel
を実行します。
または、npm run test:integration
を実行して、最初に順次テストを実行します。その後、それが完了すると、並列テストが実行されます。
または、npm run test
を実行して、単体テストと統合テストの両方を実行します。
注:ユニットテストと統合テストで使用しているディレクトリ構造は次のとおりです。
__tests__
integration
src
*.spec.js
*.test.js
jest.config.js
unit
src
*.spec.js
*.test.js
jest.config.js
シリアルテストランナーを使用します。
npm install jest-serial-runner --save-dev
Jestをセットアップして使用します。 jest.config.js内:
module.exports = {
...,
runner: 'jest-serial-runner'
};
プロジェクト機能を使用して、さまざまなテストにさまざまな構成を提供できます。