From 4b13395b0cd2ae4d981d1bff1120cfddba7d1177 Mon Sep 17 00:00:00 2001 From: stoletniy Date: Wed, 25 Oct 2017 13:34:16 +0300 Subject: [PATCH 1/2] Add JS error checking to acceptance tests [MAILPOET-1179] --- tests/_support/Helper/Acceptance.php | 45 +++++++++++++++++++++++ tests/acceptance/SubscriptionFormCest.php | 1 + 2 files changed, 46 insertions(+) diff --git a/tests/_support/Helper/Acceptance.php b/tests/_support/Helper/Acceptance.php index dde208237b..536e54401e 100644 --- a/tests/_support/Helper/Acceptance.php +++ b/tests/_support/Helper/Acceptance.php @@ -5,5 +5,50 @@ namespace Helper; class Acceptance extends \Codeception\Module { + protected $js_errors = array(); + /** + * Note: Selenium JS error log buffer is cleared after logs retrieval: + * https://github.com/SeleniumHQ/selenium/wiki/Logging#retrieval-of-logs + */ + function seeNoJSErrors() { + $wd = $this->getModule('WPWebDriver'); + + try { + $logEntries = array_slice( + $wd->webDriver->manage()->getLog('browser'), + -15 // Number of log entries to tail + ); + + foreach($logEntries as $logEntry) { + if($this->isJSError($logEntry)) { + // Collect JS errors into an array + $this->js_errors[] = $logEntry['message']; + } + } + + if(!empty($this->js_errors)) { + $this->debug('JS errors : ' . print_r($this->js_errors, true)); + } + } catch (\Exception $e) { + $this->debug('Unable to retrieve Selenium logs : ' . $e->getMessage()); + } + + // String comparison is used to show full error messages in test fail diffs + $this->assertEquals('', join(PHP_EOL, $this->js_errors), 'JS errors are present'); + } + + protected function isJSError($logEntry) { + return isset($logEntry['level']) + && isset($logEntry['message']) + && isset($logEntry['source']) + && $logEntry['level'] === 'SEVERE' + && ($logEntry['source'] === 'javascript' // Native JS errors + || ($logEntry['source'] === 'network' && preg_match('/\.js/i', $logEntry['message'])) // JS scripts failed to load + ); + } + + function _after() { + $this->js_errors = array(); + } } diff --git a/tests/acceptance/SubscriptionFormCest.php b/tests/acceptance/SubscriptionFormCest.php index 08cdbc0f65..af0949ee43 100644 --- a/tests/acceptance/SubscriptionFormCest.php +++ b/tests/acceptance/SubscriptionFormCest.php @@ -14,6 +14,7 @@ class SubscriptionFormCest $I->fillField('input[title="Email"]', 'test-email@example.com'); $I->click('.mailpoet_submit'); $I->waitForText('Check your inbox or spam folder to confirm your subscription.', 3, '.mailpoet_validate_success'); + $I->seeNoJSErrors(); } function _after(\AcceptanceTester $I) { From 4270e4c315d0505fe894d638cded4f4c3dbb58f3 Mon Sep 17 00:00:00 2001 From: stoletniy Date: Wed, 25 Oct 2017 14:04:11 +0300 Subject: [PATCH 2/2] Check for missing CSS files in acceptance tests [MAILPOET-1177] --- tests/_support/Helper/Acceptance.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/_support/Helper/Acceptance.php b/tests/_support/Helper/Acceptance.php index 536e54401e..2ff44db10c 100644 --- a/tests/_support/Helper/Acceptance.php +++ b/tests/_support/Helper/Acceptance.php @@ -44,7 +44,7 @@ class Acceptance extends \Codeception\Module && isset($logEntry['source']) && $logEntry['level'] === 'SEVERE' && ($logEntry['source'] === 'javascript' // Native JS errors - || ($logEntry['source'] === 'network' && preg_match('/\.js/i', $logEntry['message'])) // JS scripts failed to load + || ($logEntry['source'] === 'network' && preg_match('/\.(js|css)/i', $logEntry['message'])) // JS/CSS files failed to load ); }