aboutsummaryrefslogtreecommitdiffstats
path: root/test/lib
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2018-03-12 05:52:29 +0800
committerkumavis <aaron@kumavis.me>2018-03-12 05:52:29 +0800
commit0419276958a168f2d7b75c11cfe8d14cf5f39514 (patch)
tree9c408f277c3c495a08b6f33bd8f1a71cb710dedd /test/lib
parent7e56c6b6fa92453559f2510e390fce451de2dead (diff)
downloadtangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.tar
tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.tar.gz
tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.tar.bz2
tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.tar.lz
tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.tar.xz
tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.tar.zst
tangerine-wallet-browser-0419276958a168f2d7b75c11cfe8d14cf5f39514.zip
test - poll for element instead of manual timeouts
Diffstat (limited to 'test/lib')
-rw-r--r--test/lib/util.js53
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
+}