function wait(app, value) { return Test.promise(function(resolve) { // If this is the first async promise, kick off the async test if (++countAsync === 1) { Test.adapter.asyncStart(); } // Every 10ms, poll for the async thing to have finished var watcher = setInterval(function() { var router = app.__container__.lookup('router:main'); // 1. If the router is loading, keep polling var routerIsLoading = router.router && !!router.router.activeTransition; if (routerIsLoading) { return; } // 2. If there are pending Ajax requests, keep polling if (Test.pendingAjaxRequests) { return; } // 3. If there are scheduled timers or we are inside of a run loop, keep polling if (run.hasScheduledTimers() || run.currentRunLoop) { return; } if (Test.waiters && Test.waiters.any(function(waiter) { var context = waiter[0]; var callback = waiter[1]; return !callback.call(context); })) { return; } // Stop polling clearInterval(watcher); // If this is the last async promise, end the async test if (--countAsync === 0) { Test.adapter.asyncEnd(); } // Synchronously resolve the promise run(null, resolve, value); }, 10); }); }
Test.registerAsyncHelper('slowHelper', function() { return Test.promise(function(resolve) { setTimeout(resolve, 10); }); });