Skip to content

Commit 831139b

Browse files
authored
chore: make TestWatcher extend emittery (#10324)
1 parent 8020c31 commit 831139b

7 files changed

Lines changed: 21 additions & 22 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- `[jest-config]` [**BREAKING**] Default to Node testing environment instead of browser (JSDOM) ([#9874](https://github.com/facebook/jest/pull/9874))
66
- `[jest-config]` [**BREAKING**] Use `jest-circus` as default test runner ([#10686](https://github.com/facebook/jest/pull/10686))
77
- `[jest-config, jest-runtime]` Support ESM for files other than `.js` and `.mjs` ([#10823](https://github.com/facebook/jest/pull/10823))
8+
- `[jest-core]` make `TestWatcher` extend `emittery` ([#10324](https://github.com/facebook/jest/pull/10324))
89
- `[jest-repl, jest-runner]` [**BREAKING**] Run transforms over environment ([#8751](https://github.com/facebook/jest/pull/8751))
910
- `[jest-runner]` [**BREAKING**] set exit code to 1 if test logs after teardown ([#10728](https://github.com/facebook/jest/pull/10728))
1011
- `[jest-snapshot]` [**BREAKING**] Make prettier optional for inline snapshots - fall back to string replacement ([#7792](https://github.com/facebook/jest/pull/7792))

packages/jest-core/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"@types/node": "*",
1818
"ansi-escapes": "^4.2.1",
1919
"chalk": "^4.0.0",
20+
"emittery": "^0.7.2",
2021
"exit": "^0.1.2",
2122
"graceful-fs": "^4.2.4",
2223
"jest-changed-files": "^26.6.2",

packages/jest-core/src/TestScheduler.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ export default class TestScheduler {
419419
throw new Error('Reporter should be either a string or an array');
420420
}
421421

422-
private _bailIfNeeded(
422+
private async _bailIfNeeded(
423423
contexts: Set<Context>,
424424
aggregatedResults: AggregatedResult,
425425
watcher: TestWatcher,
@@ -429,17 +429,16 @@ export default class TestScheduler {
429429
aggregatedResults.numFailedTests >= this._globalConfig.bail
430430
) {
431431
if (watcher.isWatchMode()) {
432-
watcher.setState({interrupted: true});
433-
} else {
434-
const failureExit = () => exit(1);
435-
436-
return this._dispatcher
437-
.onRunComplete(contexts, aggregatedResults)
438-
.then(failureExit)
439-
.catch(failureExit);
432+
await watcher.setState({interrupted: true});
433+
return;
434+
}
435+
436+
try {
437+
await this._dispatcher.onRunComplete(contexts, aggregatedResults);
438+
} finally {
439+
exit(1);
440440
}
441441
}
442-
return Promise.resolve();
443442
}
444443
}
445444

packages/jest-core/src/TestWatcher.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import {EventEmitter} from 'events';
8+
import emittery = require('emittery');
99

1010
type State = {
1111
interrupted: boolean;
1212
};
1313

14-
export default class TestWatcher extends EventEmitter {
14+
export default class TestWatcher extends emittery.Typed<{change: State}> {
1515
state: State;
1616
private _isWatchMode: boolean;
1717

@@ -21,9 +21,9 @@ export default class TestWatcher extends EventEmitter {
2121
this._isWatchMode = isWatchMode;
2222
}
2323

24-
setState(state: State): void {
24+
async setState(state: State): Promise<void> {
2525
Object.assign(this.state, state);
26-
this.emit('change', this.state);
26+
await this.emit('change', this.state);
2727
}
2828

2929
isInterrupted(): boolean {

packages/jest-runner/src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import type {
2525
TestRunnerContext,
2626
TestRunnerOptions,
2727
TestWatcher,
28-
WatcherState,
2928
} from './types';
3029

3130
const TEST_WORKER_PATH = require.resolve('./testWorker');
@@ -239,7 +238,7 @@ export default class TestRunner {
239238
};
240239

241240
const onInterrupt = new Promise((_, reject) => {
242-
watcher.on('change', (state: WatcherState) => {
241+
watcher.on('change', state => {
243242
if (state.interrupted) {
244243
reject(new CancelRun());
245244
}

packages/jest-runner/src/types.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import type {EventEmitter} from 'events';
8+
import type {Typed as EmitteryTyped} from 'emittery';
99
import type {JestEnvironment} from '@jest/environment';
1010
import type {
1111
AssertionResult,
@@ -79,10 +79,8 @@ export type TestRunnerSerializedContext = {
7979
};
8080

8181
// TODO: Should live in `@jest/core` or `jest-watcher`
82-
export type WatcherState = {
83-
interrupted: boolean;
84-
};
85-
export interface TestWatcher extends EventEmitter {
82+
type WatcherState = {interrupted: boolean};
83+
export interface TestWatcher extends EmitteryTyped<{change: WatcherState}> {
8684
state: WatcherState;
8785
setState(state: WatcherState): void;
8886
isInterrupted(): boolean;

yarn.lock

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1784,6 +1784,7 @@ __metadata:
17841784
"@types/rimraf": ^3.0.0
17851785
ansi-escapes: ^4.2.1
17861786
chalk: ^4.0.0
1787+
emittery: ^0.7.2
17871788
exit: ^0.1.2
17881789
graceful-fs: ^4.2.4
17891790
jest-changed-files: ^26.6.2
@@ -7623,7 +7624,7 @@ __metadata:
76237624
languageName: node
76247625
linkType: hard
76257626

7626-
"emittery@npm:^0.7.1":
7627+
"emittery@npm:^0.7.1, emittery@npm:^0.7.2":
76277628
version: 0.7.2
76287629
resolution: "emittery@npm:0.7.2"
76297630
checksum: 34acfef51922a1b73d75cb658bf43ecb279633b263ffa831fb87697abbbd3aa4241ef15d204eeaa6a3c62656bd7563de7145c416a2bb18c4805e54ce6d7cdac6

0 commit comments

Comments
 (0)