Codeception устанавливает переменные сеанса

#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';