diff options
author | kumavis <aaron@kumavis.me> | 2018-03-12 05:52:29 +0800 |
---|---|---|
committer | kumavis <aaron@kumavis.me> | 2018-03-12 05:52:29 +0800 |
commit | 0419276958a168f2d7b75c11cfe8d14cf5f39514 (patch) | |
tree | 9c408f277c3c495a08b6f33bd8f1a71cb710dedd /test/lib/util.js | |
parent | 7e56c6b6fa92453559f2510e390fce451de2dead (diff) | |
download | tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.tar.gz tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.tar.zst tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.zip |
test - poll for element instead of manual timeouts
Diffstat (limited to 'test/lib/util.js')
-rw-r--r-- | test/lib/util.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/test/lib/util.js b/test/lib/util.js new file mode 100644 index 000000000..626280745 --- /dev/null +++ b/test/lib/util.js @@ -0,0 +1,53 @@ +module.exports = { + timeout, + queryAsync, + findAsync, + pollUntilTruthy, +} + +function timeout (time) { + return new Promise((resolve, reject) => { + setTimeout(resolve, time || 1500) + }) +} + +async function findAsync(container, selector, opts) { + try { + return await pollUntilTruthy(() => { + const result = container.find(selector) + if (result.length > 0) return result + }, opts) + } catch (err) { + throw new Error(`Failed to find element within interval: "${selector}"`) + } +} + +async function queryAsync(jQuery, selector, opts) { + try { + return await pollUntilTruthy(() => { + const result = jQuery(selector) + if (result.length > 0) return result + }, opts) + } catch (err) { + throw new Error(`Failed to find element within interval: "${selector}"`) + } +} + +async function pollUntilTruthy(fn, opts = {}){ + const pollingInterval = opts.pollingInterval || 100 + const timeoutInterval = opts.timeoutInterval || 5000 + const start = Date.now() + let result + while (!result) { + // check if timedout + const now = Date.now() + if ((now - start) > timeoutInterval) { + throw new Error(`pollUntilTruthy - failed to return truthy within interval`) + } + // check for result + result = fn() + // run again after timeout + await timeout(pollingInterval, timeoutInterval) + } + return result +} |