#php #codeception
#php #codeception
Вопрос:
Есть ли способ установить переменную сеанса с помощью Codeception? Я пытался:
$_SESSION['variable'] = true;
Но, похоже, это не сработало.
Ответ №1:
У меня такая же ошибка, и, возможно, я нашел решение.
ПРИМЕЧАНИЕ: я использую Yii2 с PhpBrowser
<?php
declare(strict_types=1);
namespace testsfrontendacceptance;
// use ...
class MyCest
{
public function _before(AcceptanceTester $I)
{
$_SESSION = [
// some session values
'id' => 15
];
session_commit();
/*
PHPSESSID - is a default name
but in Yii2 config you may override it
check 'session' component in config
*/
$I->setCookie('PHPSESSID', session_id(), [
'domain' => ''
]);
$I->amOnPage('/page');
}
}
И в PageController я проверяю, существует переменная сеанса
И это существует!
PS извините за мой плохой английский
Ответ №2:
Вы можете использовать сеансы с модулем Selenium в Codeception (потому что он использует экземпляр браузера для тестирования страниц). С модулем PhpBrowser ваши сеансы не будут работать по умолчанию (потому что он использует независимые запросы CURL для получения содержимого страницы). Таким образом, вы можете:
а) установите файл cookie сеанса вручную:
$I->wantTo('test something');
$I->setCookie('sessionid', '123213123123123');
$I->amOnPage('/test');
б) создайте какой-нибудь вспомогательный класс и сохраните там свои переменные (я рекомендую этот способ).
tests/_helpers/AppHelper.php:
class AppHelper extends CodeceptionModule
{
public static $global;
...
приемочный тест:
AppHelper::$global = 'test';