Skip to content

Commit b9b2ba5

Browse files
committed
fix(TestScheduler): ensure TestScheduler subscribes to expectations before hot subjects
1 parent 7a15304 commit b9b2ba5

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/schedulers/TestScheduler.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import Notification from '../Notification';
44
import Subject from '../Subject';
55

66
export default class TestScheduler extends VirtualTimeScheduler {
7+
private hotObservables: { setup: (scheduler: TestScheduler) => void, subject: Subject<any> }[] = [];
8+
79
constructor(public assertDeepEqual: (actual: any, expected: any) => boolean | void) {
810
super();
911
}
@@ -22,14 +24,19 @@ export default class TestScheduler extends VirtualTimeScheduler {
2224
});
2325
}
2426

25-
createHotObservable(marbles: string, values?: any, error?: any) {
27+
createHotObservable<T>(marbles: string, values?: any, error?: any): Subject<T> {
2628
let messages = TestScheduler.parseMarbles(marbles, values, error);
2729
let subject = new Subject();
28-
messages.forEach(({ notification, frame }) => {
29-
this.schedule(() => {
30-
notification.observe(subject);
31-
}, frame);
32-
}, this);
30+
this.hotObservables.push({
31+
setup(scheduler) {
32+
messages.forEach(({ notification, frame }) => {
33+
scheduler.schedule(() => {
34+
notification.observe(subject);
35+
}, frame);
36+
});
37+
},
38+
subject
39+
});
3340
return subject;
3441
}
3542

@@ -62,7 +69,12 @@ export default class TestScheduler extends VirtualTimeScheduler {
6269
};
6370
}
6471

65-
flush() {
72+
flush() {
73+
const hotObservables = this.hotObservables;
74+
while(hotObservables.length > 0) {
75+
hotObservables.shift().setup(this);
76+
}
77+
6678
super.flush();
6779
const flushTests = this.flushTests.filter(test => test.ready);
6880
while (flushTests.length > 0) {

0 commit comments

Comments
 (0)