2017-12-28 37 views
2

httpリクエストの回帰テストを作成しようとしています。それはカート/チェックアウトコントローラです。laravelテストでセッションIDを設定する

コントローラは、ある時点で、session_idのカートがリクエストのセッションIDと等しいかどうかをチェックします。ややCart::whereSessionId(session()->getId())->first()のようです。

残念なことに、リクエストのセッションIDは実際のテストで生成されたものと同じではありません。つまり、工場を使用してカートを作成しても、$cart = factory(Cart::class)->create(['session_id' => session()->getId()])というレコードは見つかりません。

どのようにしてリクエストのセッションIDを設定できますか?

答えて

0

これはハックに近いかもしれませんが、このようなテストの実行中にセッショントークンを設定することができます:あなたのコントローラでのセッションIDは、セッションIDと同じになります

$sessionId = session()->getId(); 
$cart = factory(Cart::class)->create(['session_id' => $sessionId]) 

$response = $this->withSession(['_token' => $sessionId]) 
    ->call('GET', action('[email protected]')); 

をあなたのテスト方法。

+0

残念ながら、それは私のためには機能しません。コントローラからのsession() - > getId()の呼び出しは、まだ新しいIDを返します。 – rzb

+0

奇妙なことに、私はセッションドライバとしてredisとfileの両方で同じidを取得します。別の解決策を見つけてください。 – piscator

+0

ありがとうございます。それは実際にあなたのために働くことは奇妙です。 _トークンはCSRFトークンであり、私はセッションIDと同じであるべきではないと思います。 – rzb

関連する問題