【问题标题】:Codeception set session variablesCodeception 设置会话变量
【发布时间】:2014-07-02 03:26:25
【问题描述】:

有没有办法使用 Codeception 设置会话变量?我试过了:

$_SESSION['variable'] = true;

但这似乎不起作用。

【问题讨论】:

    标签: php codeception


    【解决方案1】:

    我有同样的错误,也许我找到了解决方案。

    注意:我使用 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 我 检查存在 会话变量 而且它存在

    附: 抱歉我的英语不好

    【讨论】:

      【解决方案2】:

      您可以在 Codeception 中使用 Selenium 模块的会话(因为它使用浏览器的实例来测试页面)。使用 PHPBrowser 模块,默认情况下您的会话将不起作用(因为它使用独立的 CURL 请求来获取页面内容)。所以你可以:

      a) 手动设置会话 cookie:

      $I->wantTo('test something');
      $I->setCookie('sessionid', '123213123123123');
      $I->amOnPage('/test');
      

      b) 创建一些帮助类并将变量存储在那里(我推荐这种方式)。

      测试/_helpers/AppHelper.php:

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

      验收测试:

      AppHelper::$global = 'test';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多