From 527ac92f8dd3e58f7dc2246cdfd84b437f42e0b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Theys?= Date: Tue, 7 Jun 2022 09:27:55 +0000 Subject: [PATCH] [IMP] mail: unregister afterEvent handler in tests This will reduce memory leaks in tests. closes odoo/odoo#92878 Signed-off-by: Christophe Monniez (moc) --- addons/mail/static/tests/helpers/test_utils.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/addons/mail/static/tests/helpers/test_utils.js b/addons/mail/static/tests/helpers/test_utils.js index 6f8806526df..0325f1bb7c9 100644 --- a/addons/mail/static/tests/helpers/test_utils.js +++ b/addons/mail/static/tests/helpers/test_utils.js @@ -301,19 +301,20 @@ function getAfterEvent({ messagingBus }) { }, timeoutDelay); }); // Set up the promise to resolve if the event is triggered. - const eventProm = new Promise(resolve => { - messagingBus.on(eventName, null, data => { - if (!predicate || predicate(data)) { - resolve(); - } - }); - }); + const eventProm = makeDeferred(); + const eventHandler = ev => { + if (!predicate || predicate(ev.detail)) { + eventProm.resolve(); + } + }; + messagingBus.addEventListener(eventName, eventHandler); // Start the function expected to trigger the event after the // promise has been registered to not miss any potential event. const funcRes = func(); // Make them race (first to resolve/reject wins). await Promise.race([eventProm, timeoutProm]); clearTimeout(timeoutNoEvent); + messagingBus.removeEventListener(eventName, eventHandler); // If the event is triggered before the end of the async function, // ensure the function finishes its job before returning. return await funcRes;