我刚刚建立了一个小型的Laravel API,它通过5.3中引入的Passport进行保护。到目前为止,一切都运作良好。
由于我将是唯一一个使用API的人,我只是将\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class
添加到我的web中间件组中,以便生成和处理我的API令牌。
对我的问题:我如何处理我的应用程序测试中的令牌? actingAs($user)
似乎没有神奇地将用户的令牌添加到请求中。我可以使用$this->withoutMiddleware();
,但是所有中间件都被禁用,而不仅仅是负责身份验证的中间件。
关于如何解决这个问题的任何想法?
非常感谢您的帮助!
一个更容易的解决方案是将api
防护添加到actingAs()
方法:
$this->actingAs($user, 'api');
我终于通过这个答案继续努力:https://laracasts.com/discuss/channels/testing/passport-personal-access-token-unit-test
从上述帖子的作者粘贴的副本:
/**
*@test
*/
public function Create_an_access_token()
{
$clientRepository = new ClientRepository();
$client = $clientRepository->createPersonalAccessClient(
null, 'Test Personal Access Client', 'http://localhost'
);
DB::table('oauth_personal_access_clients')->insert([
'client_id' => $client->id,
'created_at' => new DateTime,
'updated_at' => new DateTime,
]);
$user = factory(User::class)->create();
$token = $user->createToken('TestToken')->accessToken;
$header = [];
$header['Accept'] = 'application/json';
$header['Authorization'] = 'Bearer '.$token;
$this->json('GET', '/api/user', [], $header)
->seeJson([
'id' => $user->id,
'email' => $user->email,
'name' => $user->name,
]);
}
我将相关和可重用的部分提取到一个小帮助类中,现在测试代码相当简短和可读。
希望这可以帮助处于类似情况的人。
如果您查看现有的Laravel Passport测试,这应该为您提供有关如何清楚测试此信息的充分信息: