我尝试在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"因为它使用身份验证表格。
是否有一种方法可以在不使用授权表单的情况下进行测试,或者我需要在测试代码中输入使用它的逻辑?
答案 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();
而是强制执行它。