2016-05-25 6 views
3

Мне нужно проверить конкретное поведение на основе наличия файла cookie, как установить cookie перед отправкой запроса (или на страницу)? На данный момент следующее не удается, оно ведет себя, как ничто не было установлено.Как установить cookie перед тестированием в Laravel?

$this->actingAs($user) 
     ->withSession(['user' => $user, 'profile' => $profile]) ; 
@setcookie('locale_lc', "fr", time() + 60 * 60 * 24 * 900, '/', "domain.com", true, true) ; 
$this->visit('/profile') ; 

Или

$cookie = ['locale_lc' => Crypt::encrypt('fr')] ; 

$this->actingAs($user) 
     ->withSession(['user' => $user, 'profile' => $profile]) 
     ->makeRequest('GET', '/profile', [], $cookie) ; 

ответ

0

Проблема заключалась в установке и чтения печеньем. Ни @setcookie, ни $_COOKIE не будут работать из контекста тестирования. Метод makeRequest с массивом файлов cookie является правильным.

Однако!

Сценарий чтения (контроллер, промежуточное программное обеспечение) должен использовать метод Laravel $request->cookie(), а не напрямую пытаться получить к нему доступ с помощью $_COOKIE. В моем случае печенье должно быть прочитано другим приложением на нашем домене, поэтому я также должен был отключить шифрование для конкретного печенья, которое может быть сделано в EncryptCookies.php

EncryptCookies

<?php 

protected $except = [ 
     'locale_lc' 
    ]; 

Test

<?php 

$cookie = ['locale_lc' => 'fr'] ; 

$this->actingAs($user) 
     ->withSession(['user' => $user, 'profile' => $profile]) 
     ->makeRequest('GET', '/profile', [], $cookie) ; 

Middleware

<?php 

public function handle($request, Closure $next){ 
    if($request->cookie('locale_lc')){...} 
} 
+0

Будет ли это работать, если вы не отключили шифрование? – Flimm

Смежные вопросы