Codeception设置会话变量

5
有没有一种方式可以使用Codeception设置会话变量?我尝试了以下内容:
$_SESSION['variable'] = true;

但似乎那并没有起作用。
2个回答

2
我遇到了同样的错误,也许我找到了解决方案。
注意:我使用 Yii2 和 PhpBrowser。
<?php
declare(strict_types=1);

namespace tests\frontend\acceptance;

// 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中,我检查是否存在会话变量,并且它确实存在!
附言:抱歉我的英语不好。

1
您可以在Codeception中使用Selenium模块来使用会话(因为它使用浏览器实例来测试页面)。使用PHPBrowser模块时,默认情况下不会使用您的会话(因为它使用独立的CURL请求来获取页面内容)。所以,您可以:
a)手动设置会话Cookie:
$I->wantTo('test something');
$I->setCookie('sessionid', '123213123123123');
$I->amOnPage('/test');
b) 创建一些辅助类并将变量存储在其中(我推荐这种方法)。

tests/_helpers/AppHelper.php:

class AppHelper extends \Codeception\Module
{
    public static $global;
    ...

验收测试:
AppHelper::$global = 'test';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接