首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JWT-8月的Laravel测试

JWT-8月的Laravel测试
EN

Stack Overflow用户
提问于 2016-10-20 10:19:02
回答 2查看 4.1K关注 0票数 4

我正在尝试测试用JWT_auth:https://github.com/tymondesigns/jwt-auth制作的api

代码语言:javascript
复制
class UpdateTest extends TestCase
{
    use DatabaseTransactions;

    public $token;

    public function signIn($data = ['email'=>'mail@gmail.com', 'password'=>'secret'])
    {
        $this->post('api/login', $data);
        $content = json_decode($this->response->getContent());
        $this->assertObjectHasAttribute('token', $content);
        $this->token = $content->token;

        return $this;
    }

    /** @test */
    public function a_user_updates_his_account()
    {
        factory(User::class)->create([
            'name'              => 'Test',
            'last_name'         => 'Test',
            'email'             => 'mail@gmail.com',
            'mobile'            => '062348383',
            'function'          => 'ceo',
            'about'             => 'About me.....',
            'corporation_id'    => 1
        ]);

        $user = User::first();
        $user->active = 2;
        $user->save();

        $this->signIn();

        $url = '/api/user/' . $user->slug . '?token=' . $this->token;
        $result = $this->json('GET', $url);
        dd($result);
    }
}

结果总是:

代码语言:javascript
复制
The token could not be parsed from the request

我怎么才能做到这一点!?

源(https://github.com/tymondesigns/jwt-auth/issues/206)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-20 21:51:05

在这种情况下测试API的一种方法是绕过实际的令牌验证,但仍然登录用户(如果需要识别用户)。下面是我们最近在基于API的应用程序中使用的助手方法的一个片段。

代码语言:javascript
复制
/**
 * Simulate call api
 *
 * @param  string $endpoint
 * @param  array  $params
 * @param  string $asUser
 *
 * @return mixed
 */
protected function callApi($endpoint, $params = [], $asUser = 'user@example.org')
{
    $endpoint = starts_with($endpoint, '/')
        ? $endpoint
        : '/' . $endpoint;

    $headers = [];

    if (!is_null($asUser)) {
        $token = auth()->guard('api')
            ->login(\Models\User::whereEmail($asUser)->first());

        $headers['Authorization'] = 'Bearer ' . $token;
    }

    return $this->json(
        'POST', 
        'http://api.dev/' . $endpoint,
        $params,
        $headers
    );
}

是这样使用的:

代码语言:javascript
复制
$this->callApi('orders/list', [
        'type' => 'customers' 
    ])
    ->seeStatusOk()
票数 5
EN

Stack Overflow用户

发布于 2016-10-20 17:53:37

基本上,目前还没有真正的解决办法。在测试过程中创建并传递给Laravel处理的虚假请求以某种方式删除了令牌数据。

它已经被报道在一个问题(https://github.com/tymondesigns/jwt-auth/issues/852),但据我所知,还没有解决办法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40151658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档