O Laravel TestCase não envia cabeçalhos de autorização (token JWT)

Sumário

Estamos escrevendo testes de unidade para testar a criação e invalidação de tokens JWT e recebendo um erro "O token não pôde ser analisado a partir da solicitação" de um JWTException sempre que tentamos JWTAuth :: invalidar o token.

Descrição

Dentro do nosso controlador, para criar um token de usuário, estamos passando o endereço de e-mail do usuário e retornando o token JWT.

Depois, destruímos o token, invalidando-o usando o método invalidateToken e passando o token enviando um cabeçalho de autorização.

public function invalidateToken()
{
    try {
        JWTAuth::invalidate(JWTAuth::getToken());
        return Response::json(['status' => 'success'], 200);
    } catch (JWTException $e) {
        return Response::json(['status' => 'error', 'message' => $e->getMessage()], 401);
    }
}

Isso funciona perfeitamente usando o Postman e o cliente PHPStorms Restful.

Quando tentamos escrever um teste para esse método, somos confrontados com uma resposta de erro e uma mensagem de erro "O token não pôde ser analisado a partir da solicitação".

Nosso teste é o seguinte:

public function testInvalidateToken()
{
    $createUserToken = $this->call('POST', '/token/create', ['email' => '[email protected]']);
    $user = $this->parseJson($createUserToken);

    $response = $this->call('POST', '/token/invalidate',
        [/* params */], [/* cookies */], [/* files */], ['HTTP_Authorization' => 'Bearer '.$user->token]);

    // var_dump($user->token);
    // die();

    $data = $this->parseJson($response);
    $this->assertEquals($data->status, 'success');
    $this->assertEquals($data->status, '200');
}

Estamos usando o Laravel 5.1 (que tem os cookies como parâmetro antes do parâmetro do servidor)

PHP versão 5.6.10

PHPUnit 3.7.28

* EDIT * Atualizado para o PHPUnit 4.7.6 e ainda não conseguiu enviar pelo cabeçalho de autorização.

* SOLUÇÃO *
No método __construct do meu controlador, tenho essas poucas linhas de código em execução e resolvi meu problema.

if ((\App::environment() == 'testing') && array_key_exists("HTTP_Authorization",  Request::server())) {
    JWTAuth::setRequest(\Route::getCurrentRequest());
}

questionAnswers(4)

yourAnswerToTheQuestion