2016-09-21 54 views
0

我想在Laravel 5.1创建一个测试,但我想使用它没有授权形式。Laravel测试没有通过验证

在我RoleController类我把这个以:

public function __construct() 
{ 
    $this->middleware('auth'); 
} 

我一直在使用use WithoutMiddleWare;尝试,但did'nt工作。这是PHPUnit的输出:

A request to [http://localhost/nuevo/rol] failed. Received status code [500]. 

使用$this->withoutMiddleware();每个测试方法但din't工作或者也试过。这是PHPUnit的输出:

InvalidArgumentException: Nothing matched the filter [nombre] CSS query provided for [http://localhost/auth/login]. 

而是访问的“NUEVO/ROL”路线测试主动要求“认证/注册”,因为它的工作原理使用AUTH形式。

是否有一种方法可以在不使用授权表单的情况下进行测试,或者我需要在测试代码中放入使用它的逻辑?

+0

你在哪里创建你的测试?在你的''app/Http/Controller' **目录中? – nyedidikeke

+0

不,在控制器中,我所做的唯一事情就是在构造函数中加载auth中间件。我的测试是在测试目录中,并且我尝试禁用中间件。 –

+0

好的。下面刚发布了一个解决方案 – nyedidikeke

回答

0

Laravel入门Test-driven development (TDD),转到测试目录中的安装根目录(PHPUnit测试支持默认提供的,所以你不必担心设置,因为这是already catered for

创建您的测试,也运行以下工匠命令:

php artisan make:test RoleTest 

工匠以上命令会在你的测试目录,在它下面的测试情况下,创建一个新的RoleTest类(在您新创建tests/RoleTest.php文件):

class RoleTest extends TestCase 
{ 
    /** 
    * A basic test example. 
    * 
    * @return void 
    */ 
    public function testExample() 
    { 
     $this->assertTrue(true); 
    } 
} 

要运行测试之前禁用中间件,不要使用use WithoutMiddleware;如下,以便它适用于所有方法的RoleTest类下设:

class RoleTest extends TestCase 
{ 
    use WithoutMiddleware; 

    /** 
    * A basic test example. 
    * 
    * @return void 
    */ 
    public function testExample() 
    { 
     $this->assertTrue(true); 
    } 
} 

如果你想在中间件的豁免适用于选定的方法只会让这样的方法如下内使用$this->withoutMiddleware();

public function testExampleWithoutMiddleware() 
{ 
    $this->withoutMiddleware(); 

    $this->visit('/') 
     ->see('Laravel'); 
} 

只需在命令行界面运行phpunit运行测试。

在上面的最后一个片段中,中间件是我们在其中运行测试访问你的网站或应用程序根资源可用testExampleWithoutMiddleware方法禁用(根据你的安装目录,或者规定由您的routes.php文件)并检查它是否包含术语Laravel

TL; DR

只需使用$this->withoutMiddleware();是你的方法与您的中间件禁用运行PHPUnit的测试;不是$this->middleware('auth');而是强制它。

+0

也许我没有解释清楚。我需要$ this->中间件('auth');在控制器中,因为我希望访问需要被记录,并且在测试中我想绕过授权,但是我已经尝试了你解释的两种方法,但都没有成功。 –

+0

你的问题说**没有通过验证**!你想实现什么? **测试访问中间件的权限并启用中间件并以用户身份登录**或**测试访问中间件的页面以便不登录**? – nyedidikeke