From 1ec328302d67e1de85c1fd07fa6598ed07f638aa Mon Sep 17 00:00:00 2001 From: Nishchal Gautam Date: Fri, 9 Oct 2020 18:38:21 +0700 Subject: [PATCH 1/2] test(mockMiddleware): use fake timers --- src/middlewares/MockMiddleware.spec.ts | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/middlewares/MockMiddleware.spec.ts b/src/middlewares/MockMiddleware.spec.ts index c37e9eea..22615795 100644 --- a/src/middlewares/MockMiddleware.spec.ts +++ b/src/middlewares/MockMiddleware.spec.ts @@ -1,5 +1,7 @@ import {IMockMiddlewareHandler, MockMiddleware} from "./MockMiddleware"; +jest.useFakeTimers(); + describe("MockMiddleware", () => { it("is defined", () => { expect(MockMiddleware).toBeDefined(); @@ -115,18 +117,19 @@ describe("MockMiddleware", () => { expect(exp).toBe(data as any); done(); }); + jest.runAllTimers(); }); }); - it("accepts delay as second parameter", (done) => { - const startTime = (new Date()).getTime(); - // in some cases (eg. firefox), setTimeOut is not accurate, they appear to be +/- 15 ms inaccurate - MockMiddleware.resolvingPromise(null, 50).then(() => { - const endTime = (new Date()).getTime(); - expect(endTime - startTime).toBeGreaterThanOrEqual(35); - expect(endTime - startTime).toBeLessThanOrEqual(65); - done(); - }); + it("accepts delay as second parameter", async () => { + const spy = jest.fn(); + MockMiddleware.resolvingPromise({ mock: true }, 50).then(spy); + jest.advanceTimersByTime(49); + expect(spy).not.toHaveBeenCalled(); + jest.advanceTimersByTime(51); + // this is required because even though it's advanced by time, Promise is on kinda background, we need to kick off promise chain + await Promise.resolve(); + expect(spy).toHaveBeenCalled(); }); }); From f60abaebf9010e9b00c9589db334201298c9da1f Mon Sep 17 00:00:00 2001 From: Nishchal Gautam Date: Fri, 9 Oct 2020 18:44:34 +0700 Subject: [PATCH 2/2] test(mockMiddleware): fix timing --- src/middlewares/MockMiddleware.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middlewares/MockMiddleware.spec.ts b/src/middlewares/MockMiddleware.spec.ts index 22615795..36c42d37 100644 --- a/src/middlewares/MockMiddleware.spec.ts +++ b/src/middlewares/MockMiddleware.spec.ts @@ -126,7 +126,7 @@ describe("MockMiddleware", () => { MockMiddleware.resolvingPromise({ mock: true }, 50).then(spy); jest.advanceTimersByTime(49); expect(spy).not.toHaveBeenCalled(); - jest.advanceTimersByTime(51); + jest.advanceTimersByTime(1); // this is required because even though it's advanced by time, Promise is on kinda background, we need to kick off promise chain await Promise.resolve(); expect(spy).toHaveBeenCalled();