在 Laravel 5 中调用未定义的方法 Session::has() + Codeception 功能测试

Call to undefined method Session::has() in Laravel 5 + Codeception functional testing

我在 Laravel 5 中使用 Codeception 运行 进行了一些功能测试。

下面是一个示例测试

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class HomePageTestCest
{
    use WithoutMiddleware;

    public function _before(FunctionalTester $I)
    {
        //some setup to run
    }

    public function _after(FunctionalTester $I)
    {
    }

    // tests
    public function tryToTest(FunctionalTester $I)
    {
        $I->wantToTest('If i can go to home page without errors');
        $I->amOnPage('/');
        $I->canSee('WELCOME TO HOMEPAGE');
    }
}

但是我在 运行 测试时遇到以下错误:

Fatal error: Call to undefined method Session::has() in /var/www/laravel5/storage/framework/views/e7953b3ce9b90e51d4cfdb279790953bbe25dc9a.php on line 225

在第 225 行我有:

<?php if(Session::has('someKey')): ?>
  //some html code
<?php endif; ?>

我认为问题出在会话驱动程序上。我也尝试实施 this 但没有任何改变。

希望能得到一些帮助。提前致谢。

LARAVEL 5.2 中,他们还像 helper

一样创建会话 class

你可以在哪里使用它

session()->has('key')

DOCUMENTATION SESSION

namespace App\Http\Controllers;

// import session class using alias
use Session;

class SampleController exntends Controller {

    public function __construct() {

    }

    public function index() {
        // print session values
        var_dump(Session::all());
    }

}

别忘了

use Illuminate\Http\Request;

并像这样使用会话

$request->session()->has('key');

感谢 hamedmehryar 提供的解决方案。我不知道为什么,但出于某种原因,我必须为外观定义整个命名空间,即使它们已经在 config/app.php 内的 'aliases' 中定义。例如:

Session::has()

应该是

Illuminate\Support\Facades\Session::has()

我在这里解释了,如果有人遇到这个问题,可以从这里解决。