Skip to content

Commit b7a83c7

Browse files
committed
Add MicroTaskScheduler unit tests
1 parent 8555b00 commit b7a83c7

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

demo/src/task-scheduler.spec.ts

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* @jest-environment jsdom
3+
*/
4+
/// <reference lib="dom" />
5+
6+
import { MicroTaskScheduler } from './task-scheduler';
7+
8+
describe('task-scheduler', () => {
9+
let taskScheduler: MicroTaskScheduler;
10+
let task: jest.Mock;
11+
12+
beforeEach(() => {
13+
taskScheduler = new MicroTaskScheduler();
14+
task = jest.fn();
15+
});
16+
17+
it('should execute task', async () => {
18+
taskScheduler.start();
19+
taskScheduler.postTask(task);
20+
await new Promise((resolve) => setTimeout(resolve, 0));
21+
expect(task).toHaveBeenCalledTimes(1);
22+
});
23+
24+
it('should execute task twice when posted twice', async () => {
25+
taskScheduler.start();
26+
taskScheduler.postTask(task);
27+
taskScheduler.postTask(task);
28+
await new Promise((resolve) => setTimeout(resolve, 0));
29+
expect(task).toHaveBeenCalledTimes(2);
30+
});
31+
32+
it('should not execute task when not started', async () => {
33+
taskScheduler.postTask(task);
34+
await new Promise((resolve) => setTimeout(resolve, 0));
35+
expect(task).not.toHaveBeenCalled();
36+
});
37+
38+
it('should not execute task when stopped', async () => {
39+
taskScheduler.start();
40+
taskScheduler.stop();
41+
taskScheduler.postTask(task);
42+
await new Promise((resolve) => setTimeout(resolve, 0));
43+
expect(task).not.toHaveBeenCalled();
44+
});
45+
46+
it('should not register listener twice', async () => {
47+
const addEventListenerSpy = jest.spyOn(window, 'addEventListener');
48+
taskScheduler.start();
49+
taskScheduler.start();
50+
expect(addEventListenerSpy).toHaveBeenCalledTimes(1);
51+
});
52+
});

demo/src/task-scheduler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class MicroTaskScheduler {
2828
}
2929

3030
private handleMessage = (event: MessageEvent) => {
31-
if (event.source === window && event.data === this.messageName) {
31+
if (event.data === this.messageName) {
3232
event.stopPropagation();
3333
const executeJob = this.executionQueue.shift();
3434
if (executeJob !== undefined) {

0 commit comments

Comments
 (0)