Всем привет,
Не так давно открыл для себя Codeception и вот пытаюсь научиться работать с ним.
Я хочу написать функциональный тест, который проверит регистрацию на сайте.
Форма отправляется AJAX-запросом, поэтому мой приемочный тест выглядит вот так:
<?php
use \AcceptanceTester;
class RegisterCest {
public function _before(AcceptanceTester $I){}
public function _after(AcceptanceTester $I){}
public function canRegisterWithCorrectCredentials(AcceptanceTester $I) {
$I->wantTo('ensure that user can register in the system and can be redirected to the thank you page');
$I->amOnPage(\Page\UserAuth::$registerPageUrl);
$newUserEmail = \Page\UserAuth::getNewUserEmailAddress();
$I->fillField('email', $newUserEmail);
$I->fillField('password', \Page\UserAuth::$correctTestUserPassword);
$I->uncheckOption('#chkRemember');
$I->click(\Page\UserAuth::$normalSubmitButton);
$newUserId = $I->grabFromDatabase('users', 'id', array('email' => $newUserEmail));
$I->dontSeeCookie('remember_me');
$I->seeInDatabase('users', array('email' => $newUserEmail, 'is_email_confirmed' => 0));
$I->seeInDatabase('users_roles', array('user_id' => $newUserId, 'role_id' => 2));
$I->seeInCurrentUrl('thanks');
}
}
acceptance.suite.yml выглядит следующим образом:
class_name: AcceptanceTester
modules:
enabled:
- \Helper\Acceptance
- WebDriver:
url: 'http://site.dev'
browser: chrome
window_size: 1920x1080
wait: 10
- Db
functional.suite.yml имеет слудющий вид:
class_name: FunctionalTester
modules:
enabled:
- PhpBrowser:
url: 'http://site.dev'
- \Helper\Functional
- Db
- REST
А тест:
<?php
use \FunctionalTester;
class RegisterCest{
public function _before(FunctionalTester $I){}
public function _after(FunctionalTester $I){}
public function canRegisterWithCorrectCredentials(FunctionalTester $I) {
$I->wantTo('ensure that user can register with correct credentials');
$registrationParams = array(
'email' => time().'_'.\Page\UserAuth::$correctTestUserEmail,
'password' => \Page\UserAuth::$correctTestUserPassword
);
$I->sendAjaxPostRequest(\Page\UserAuth::$registerPageUrl, $registrationParams);
$I->seeResponseContainsJson(array('redirectTo' => '/thanks'));
}
}
При запуске этого теста в консоли я получаю вот такую ошибку:
There was 1 failure:
---------
1) Failed to ensure that user can register with correct credentials in RegisterC
est::canRegisterWithCorrectCredentials (tests\functional\RegisterCest.php)
Step I see response contains json {"redirectTo":"/thanks"}
Fail Response JSON contains provided
- array (
'redirectTo' => '/thanks',
)
+ NULL
Failed asserting that false is true.
Scenario Steps:
2. $I->seeResponseContainsJson({"redirectTo":"/thanks"})
1. $I->sendAjaxPostRequest("register",{"email":"1461586358_AcceptanceTestUser@r
m.dev","password":"QwertyUiop"})
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
А вот JSON-ответ, который я получаю в броузере:
{"status":true,"messages":[],"redirectTo":"\/thanks"}
Версия Codeception: Codeception PHP Testing Framework v2.1.2
Для конкретно этого теста я смогу использовать какой-то обходной путь, но мне бы хотелось разобраться, как правильно работать с ответом AJAX-запроса.
Спасибо