Symfony test fonctionnel - en-têtes personnalisés ne passe pas par
Pour quelque raison que quand j'ai envoyé une nouvelle $client->demande les en-têtes que j'spécifier perdu:
public function testGetClientsAction()
{
$client = static::createClient();
$cookie = new Cookie('locale2', 'en', time() + 3600 * 24 * 7, '/', null, false, false);
$client->getCookieJar()->set($cookie);
//Visit user login page and login
$crawler = $client->request('GET', '/login');
$form = $crawler->selectButton('login')->form();
$crawler = $client->submit($form, array('_username' => 'greg', '_password' => 'greg'));
$client->request(
'GET',
'/clients',
array(),
array(),
array('X-Requested-With' => 'XMLHttpRequest', 'accept' => 'application/json')
);
print_r($client->getResponse());
die();
}
Dans la méthode qui est testé, j'ai cela sur la première ligne:
print_r($request->headers->all());
La réponse est comme suit:
Array
(
[host] => Array
(
[0] => localhost
)
[user-agent] => Array
(
[0] => Symfony2 BrowserKit
)
[accept] => Array
(
[0] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
)
[accept-language] => Array
(
[0] => en-us,en;q=0.5
)
[accept-charset] => Array
(
[0] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
)
[referer] => Array
(
[0] => http://localhost/login_check
)
[x-php-ob-level] => Array
(
[0] => 1
)
)
Vous devez vous connecter pour publier un commentaire.
J'ai le même problème et après un peu de creuser par le biais, je pense que c'est une fonctionnalité qui BrowserKit actuellement ne prend pas en charge.
J'ai connecté un problème pour elle:
https://github.com/symfony/symfony/issues/5074
Mise à jour: ce n'est pas un problème-voir les commentaires ci-dessous
Exemple De Code
De demande d'échantillons:
Récupérer les données:
Si vous cochez la définition de Client.php à la demande de méthode, vous allez voir dans la docblock une information très utile:
Cela signifie que vous devez ajouter un HTTP_ préfixe à l'en-tête que vous souhaitez envoyer. Par exemple, si vous souhaitez passer de l'en-tête X-HTTP-Method-vous Remplacer le spécifier comme suit:
HTTP_
a fonctionné pour moi.