2016-04-13 32 views
0

我在Codera上运行Laravel 5中的一些功能测试。调用未定义的方法Session :: has()在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,但没有任何改变。

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

+1

写完整的命名空间为:'Illuminate \ Support \ Facades \ Session :: has('something')' – hamedmehryar

+0

是否需要专门为功能测试编写完整的命名空间? –

+0

@hamedmehryar你的解决方案工作,但你能解释为什么我必须定义整个命名空间? –

回答

1

LARAVEL 5.2他们还创造像帮手

会话类,其中你可以使用它像这样

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()); 
    } 

} 
+0

嘿,对不起,我完全不知怎的看着你的解决方案。你的解决方案也可以。但是你知道原因吗,为什么Session :: not working? thnx提前。 –

+0

我相信别名类是自动需要的,不像laravel 4.这是一个链接,讨论你的问题。如果要使用Facades别名,请使用Use Session导入类;那么你已经可以使用Session :: has('key')。我更新我的答案,所以你可以按照我的意思 –

+0

嘿thnx回复。是的,我已经尝试过,但没有工作。唯一可用于测试的是当我使用像Illuminate \ Support \ Facades \ Session这样真正有线的完整路径时,就像我在下面的答案中所述。我正在寻找一个理由或最准确的答案。 –

0

不要忘记

use Illuminate\Http\Request;

,并使用会话这样

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

1

由于hamedmehryar的解决方案。我不知道为什么,但由于某些原因,我必须为外观定义完整的命名空间,即使它们已经在config/app.php中的“别名”中定义。例如:

Session::has() 

应该像

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

我解释在这里,如果任何人面对这个问题,就能从这里解决。

相关问题