Skip to content

Commit

Permalink
fix(test-sequencer): correctly figure out test runtime (#14473)
Browse files Browse the repository at this point in the history
  • Loading branch information
SimenB committed Sep 6, 2023
1 parent 0f8781d commit 4f2807c
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 11 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
### Fixes

- `[jest-snapshot]` Allow for strings as well as template literals in inline snapshots ([#14465](https://github.com/jestjs/jest/pull/14465))
- `[@jest/test-sequencer]` Calculate test runtime if `perStats.duration` is missing ([#14473](https://github.com/jestjs/jest/pull/14473))

### Performance

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@ test('writes the cache based on results without existing cache', async () => {
},
{
numFailingTests: 1,
perfStats: {end: 4, runtime: 3, start: 1},
// this is missing `runtime` to test that it is calculated
perfStats: {end: 4, start: 1},
testFilePath: '/test-c.js',
},
{
Expand Down
20 changes: 10 additions & 10 deletions packages/jest-test-sequencer/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ const FAIL = 0;
const SUCCESS = 1;

type Cache = {
[key: string]: [0 | 1, number] | undefined;
[key: string]:
| [testStatus: typeof FAIL | typeof SUCCESS, testDuration: number]
| undefined;
};

export type ShardOptions = {
Expand All @@ -42,7 +44,7 @@ type ShardPositionOptions = ShardOptions & {
* is called to store/update this information on the cache map.
*/
export default class TestSequencer {
private readonly _cache: Map<TestContext, Cache> = new Map();
private readonly _cache = new Map<TestContext, Cache>();

_getCachePath(testContext: TestContext): string {
const {config} = testContext;
Expand Down Expand Up @@ -191,7 +193,7 @@ export default class TestSequencer {
const failedB = this.hasFailed(testB);
const hasTimeA = testA.duration != null;
if (failedA !== failedB) {
return failedA === true ? -1 : 1;
return failedA ? -1 : 1;
} else if (hasTimeA != (testB.duration != null)) {
// If only one of two tests has timing information, run it last
return hasTimeA ? 1 : -1;
Expand All @@ -204,11 +206,7 @@ export default class TestSequencer {
}

allFailedTests(tests: Array<Test>): Array<Test> | Promise<Array<Test>> {
const hasFailed = (cache: Cache, test: Test) =>
cache[test.path]?.[0] === FAIL;
return this.sort(
tests.filter(test => hasFailed(this._getCache(test), test)),
);
return this.sort(tests.filter(test => this.hasFailed(test)));
}

cacheResults(tests: Array<Test>, results: AggregatedResult): void {
Expand All @@ -219,9 +217,11 @@ export default class TestSequencer {
if (test != null && !testResult.skipped) {
const cache = this._getCache(test);
const perf = testResult.perfStats;
const testRuntime =
perf.runtime ?? test.duration ?? perf.end - perf.start;
cache[testResult.testFilePath] = [
testResult.numFailingTests ? FAIL : SUCCESS,
perf.runtime || 0,
testResult.numFailingTests > 0 ? FAIL : SUCCESS,
testRuntime || 0,
];
}
});
Expand Down

0 comments on commit 4f2807c

Please sign in to comment.