在没有通过身份验证的情况下在Laravel进行测试

时间:2016-09-21 19:09:42

标签: php phpunit laravel-5.1

我尝试在Laravel 5.1中创建测试,但我想在没有授权表的情况下使用它。

在我的RoleController类中,我把它放在:

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

我尝试使用use WithoutMiddleWare;,但确实没有用。这是phpunit输出:

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

还尝试使用$this->withoutMiddleware();进行每种测试方法,但这也是有用的。这是phpunit输出:

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

而不是访问" nuevo / rol"路由测试请求" auth / login"因为它使用身份验证表格。

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

1 个答案:

答案 0 :(得分:0)

要开始使用Test-driven development (TDD)中的Laravel,请转到安装根中的测试目录(支持PHPUnit测试是默认情况下提供,因此您无需担心设置,因为这是already catered for

要创建测试,请运行以下Artisan命令:

{% set label = 'this is a label'%}

{% set array = label | split (" ")%}

{% for elem in array %}
 {{loop.index}} - {{ elem}}
{% endfor %}

上面的Artisan Command将在 tests 目录中创建一个新的RoleTest类,其中包含以下测试用例(在新创建的 php artisan make:test RoleTest 文件中) :

tests/RoleTest.php

要在运行测试前停用中间件,请按照以下步骤使用 class RoleTest extends TestCase { /** * A basic test example. * * @return void */ public function testExample() { $this->assertTrue(true); } } ,以便将其应用于RoleTest类下的所有方法:

use WithoutMiddleware;

如果您要将中间件的豁免应用于所选方法,只能在以下方法中使用 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 一词。< / p>

<强> TL; DR

只需使用 Laravel 即可在禁用中间件的情况下运行PHPUnit测试;不是 $this->withoutMiddleware(); 而是强制执行它。