Skip to content

Commit b55d45b

Browse files
Update nextTick() to work with fake timers
1 parent b776c10 commit b55d45b

File tree

5 files changed

+139
-2
lines changed

5 files changed

+139
-2
lines changed

package-lock.json

+110
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
],
3333
"devDependencies": {
3434
"@types/jasmine": "^2.6.0",
35+
"@types/jest": "^24.0.23",
3536
"@types/lodash": "^4.14.104",
3637
"@types/node": "^8.0.46",
3738
"babel-polyfill": "^6.26.0",

src/ts-mockito.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ import {MethodToStub} from "./MethodToStub";
3030
import {Mocker, MockPropertyPolicy} from "./Mock";
3131
import {Spy} from "./Spy";
3232

33+
// Keep a reference to the original, in case it is replaced with fake timers
34+
// by some library like jest or lolex
35+
const originalSetTimeout = setTimeout;
36+
3337
export {MockPropertyPolicy} from "./Mock";
3438

3539
export function spy<T>(instanceToSpy: T): T {
@@ -176,7 +180,7 @@ export function defer<T>(): Deferred<T> {
176180
}
177181

178182
export function nextTick(): Promise<void> {
179-
return new Promise(resolve => setTimeout(() => setImmediate(resolve), 0));
183+
return new Promise(resolve => originalSetTimeout(() => setImmediate(resolve), 0));
180184
}
181185

182186
// Export default object with all members (ember-browserify doesn't support named exports).

test/nextTick.spec.ts

+21
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,25 @@ describe("nextTick", () => {
2727
await nextTick();
2828
expect(done).toBe(true);
2929
});
30+
31+
if (typeof jest !== "undefined") {
32+
describe('with fake timers', () => {
33+
beforeEach(() => {
34+
jest.useFakeTimers();
35+
});
36+
37+
afterEach(() => {
38+
jest.useRealTimers();
39+
});
40+
41+
it('should execute after setImmediate()', async () => {
42+
let done = false;
43+
44+
setImmediate(() => done = true);
45+
46+
await nextTick();
47+
expect(done).toBe(true);
48+
});
49+
});
50+
}
3051
});

tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"types": [
1616
"node",
1717
"lodash",
18-
"jasmine"
18+
"jasmine",
19+
"jest"
1920
]
2021
}
2122
}

0 commit comments

Comments
 (0)