From 92fd78fd7829c5fcb1dcde31e9fd82deff5de751 Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Mon, 20 Apr 2020 14:04:41 -0700 Subject: [PATCH] fix: prevent race conditions when waiting for updates from fireEvent --- src/shared.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/shared.ts b/src/shared.ts index d66235a..c9977a3 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -2,7 +2,7 @@ import { fireEvent as originalFireEvent, EventType, FireFunction as originalFireFunction, - FireObject as originalFireObject + FireObject as originalFireObject, } from "@testing-library/dom"; export interface EventRecord { @@ -28,7 +28,7 @@ export const INTERNAL_EVENTS = [ "render", "mount", "update", - "destroy" + "destroy", ] as const; export type InternalEventNames = typeof INTERNAL_EVENTS[number]; @@ -75,9 +75,7 @@ function failIfNoWindow() { } } +const setImmediate = global.setImmediate || setTimeout; function waitForBatchedUpdates() { - // TODO: this waits for a possible update using setTimeout(0) which should - // be sufficient, but ideally we would hook into the Marko lifecycle to - // determine when all pending updates are complete. - return new Promise(resolve => setTimeout(resolve, 0)); + return new Promise((resolve) => setImmediate(() => setImmediate(resolve))); }