MDL-48063 behat: Fixed JS Exception
authorRajesh Taneja <rajesh@moodle.com>
Wed, 5 Nov 2014 06:04:13 +0000 (14:04 +0800)
committerRajesh Taneja <rajesh@moodle.com>
Fri, 21 Nov 2014 03:01:35 +0000 (11:01 +0800)
M is not created on all pages, like cron and
Steps which check for exported data. So we need
to ensure M is defined, before using it in
behat_hooks::wait_for_pending_js()

lib/tests/behat/behat_hooks.php

index 8b5f734..1f7f1a5 100644 (file)
@@ -406,7 +406,18 @@ class behat_hooks extends behat_base {
         for ($i = 0; $i < self::EXTENDED_TIMEOUT * 10; $i++) {
             $pending = '';
             try {
-                $jscode = 'return ' . self::PAGE_READY_JS . ' ? "" : M.util.pending_js.join(":");';
+                $jscode =
+                    'if (typeof M === "undefined") {
+                        if (document.readyState === "complete") {
+                            return "";
+                        } else {
+                            return "incomplete";
+                        }
+                    } else if (' . self::PAGE_READY_JS . ') {
+                        return "";
+                    } else {
+                        return M.util.pending_js.join(":");
+                    }';
                 $pending = $this->getSession()->evaluateScript($jscode);
             } catch (NoSuchWindow $nsw) {
                 // We catch an exception here, in case we just closed the window we were interacting with.