测试Laravel 5.3保护的API

问题描述 投票:2回答:3

我刚刚建立了一个小型的Laravel API,它通过5.3中引入的Passport进行保护。到目前为止,一切都运作良好。

由于我将是唯一一个使用API​​的人,我只是将\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class添加到我的web中间件组中,以便生成和处理我的API令牌。

对我的问题:我如何处理我的应用程序测试中的令牌? actingAs($user)似乎没有神奇地将用户的令牌添加到请求中。我可以使用$this->withoutMiddleware();,但是所有中间件都被禁用,而不仅仅是负责身份验证的中间件。

关于如何解决这个问题的任何想法?

非常感谢您的帮助!

php laravel testing
3个回答
2
投票

一个更容易的解决方案是将api防护添加到actingAs()方法:

$this->actingAs($user, 'api');

2
投票

我终于通过这个答案继续努力: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,
    ]);
}

我将相关和可重用的部分提取到一个小帮助类中,现在测试代码相当简短和可读。

希望这可以帮助处于类似情况的人。


0
投票

如果您查看现有的Laravel Passport测试,这应该为您提供有关如何清楚测试此信息的充分信息:

https://github.com/laravel/passport/tree/master/tests

© www.soinside.com 2019 - 2024. All rights reserved.