Ser*_*his 4 php phpunit laravel-5.1
我正在尝试在 Laravel 5.1 中创建一个测试,但我想在没有授权表的情况下使用它。
在我的 RoleController 类中,我将其用于:
public function __construct()
{
$this->middleware('auth');
}
Run Code Online (Sandbox Code Playgroud)
我试过使用use WithoutMiddleWare;但没有用。这是 phpunit 输出:
A request to [http://localhost/nuevo/rol] failed. Received status code [500].
Run Code Online (Sandbox Code Playgroud)
还尝试使用$this->withoutMiddleware();每种测试方法,但也不起作用。这是 phpunit 输出:
InvalidArgumentException: Nothing matched the filter [nombre] CSS query provided for [http://localhost/auth/login].
Run Code Online (Sandbox Code Playgroud)
测试不是访问“nuevo/rol”路由,而是向“auth/login”发出请求,因为它使用 auth 表单工作。
有没有一种方法可以在不使用授权表的情况下进行测试,或者我需要在我的测试代码中放入使用它的逻辑?
要开始在Laravel 中进行测试驱动开发 (TDD),请转到安装根目录中的测试目录(默认情况下提供对PHPUnit测试的支持,因此您无需担心设置,因为这已经满足了) .
要创建您的测试,请运行以下 Artisan 命令:
php artisan make:test RoleTest
Run Code Online (Sandbox Code Playgroud)
上面的 Artisan 命令将在您的测试目录中创建一个新的 RoleTest 类,其中包含以下测试用例(在您新创建的tests/RoleTest.php文件中):
class RoleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testExample()
{
$this->assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
要在运行测试之前禁用中间件,请use WithoutMiddleware;按照以下方式使用,以便将其应用于 RoleTest 类下的所有方法:
class RoleTest extends TestCase
{
use WithoutMiddleware;
/**
* A basic test example.
*
* @return void
*/
public function testExample()
{
$this->assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想将中间件的豁免应用于选定的方法,请仅$this->withoutMiddleware();在以下方法中使用:
public function testExampleWithoutMiddleware()
{
$this->withoutMiddleware();
$this->visit('/')
->see('Laravel');
}
Run Code Online (Sandbox Code Playgroud)
只需phpunit在命令行界面中运行即可运行测试。
在上面的最后一个片段中,对于testExampleWithoutMiddleware我们运行测试访问您站点或应用程序根目录中可用资源的方法(基于您的安装目录和/或routes.php文件中的规定)并检查它是否包含术语Laravel。
TL; 博士
只需使用$this->withoutMiddleware();您的方法在禁用中间件的情况下运行 PHPUnit 测试;没有$this->middleware('auth');哪个而是强制执行它。