使用 Laravel Passport 范围进行单元测试
Posted
技术标签:
【中文标题】使用 Laravel Passport 范围进行单元测试【英文标题】:Unit test with Laravel Passport scope 【发布时间】:2017-05-15 11:55:29 【问题描述】:伙计们! 当我尝试使用 Laravel 和 Passport 进行单元测试时遇到问题。
我有一些受 auth:api 中间件保护的路由,但还有一些受 Passport scope 中间件保护的路由。
例如,这是我的单元测试之一:
public function testGetPublishedPost()
$user = factory(\App\User::class)->create();
$this->actingAs($user, 'api');
$article1 = factory(\App\Article::class)->create();
$article2 = factory(\App\Article::class)->create();
$article3 = factory(\App\Article::class)->create( ['published' => false);
$json = $this->call('get', '/api/articles');
$articles = json_decode($json->getContent());
$this->assertEquals(200, $json->getStatusCode());
$this->assertEquals(2, count($articles));
这一切都很好,但现在,我想做一些测试,包括一个范围。
我该怎么做?
谢谢!
【问题讨论】:
【参考方案1】:如果您不关心测试 auth 中间件,您可以通过定义一个临时路由到您的函数来完全跳过护照身份验证:
Route::get('/_test/api/articles', 'App\Http\Controllers\YourApiController@yourArticleFunction');
//Gain access to Auth:user() in your api controller
$this->be($user);
//Call the temporary route
$response = $this->call('GET', '/_test/api/articles');
【讨论】:
以上是关于使用 Laravel Passport 范围进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.7 在播种机中使用 Passport 进行测试
我应该还是不应该在 Laravel Passport 中使用带有密码授予授权的刷新令牌?
使用 Passport 和 Laravel 进行身份验证时返回访问令牌和用户
使用 Passport 进行 Laravel API 身份验证导致 401(未经授权)
php 使用Passport进行Laravel REST API身份验证:https://www.cloudways.com/blog/rest-api-laravel-passport-authen