2016-05-25 21 views
3

クッキーの存在に基づいて特定の動作をテストする必要があります。要求を送信する前にクッキーを設定するにはどうすればよいですか?次の段階で失敗すると、何も設定されていないのが好きです。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は正しいものです。

ただし、

読み取りスクリプト(コントローラ、ミドルウェア)は、Laravelの$request->cookie()メソッドを使用していて、直接$_COOKIEでアクセスしようとしていない必要があります。私もEncryptCookies.php

EncryptCookies

<?php 

protected $except = [ 
     'locale_lc' 
    ]; 

テストで行うことができ、その特定のクッキー、暗号化を無効にする必要がありましたので、私の場合はクッキーは、当社のドメイン上の別のアプリで読み取るする必要があります

<?php 

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

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

ミドルウェア

<?php 

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

暗号化を無効にしていない場合でもこれは動作しますか? – Flimm

関連する問題