2017-12-28 7 views
2

http 요청에 대한 회귀 테스트를 작성하려고합니다. 카트/체크 아웃 컨트롤러입니다.laravel 테스트에서 세션 ID 설정

어떤 시점에서 컨트롤러는 요청의 세션 ID와 동일한 session_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

감사. 그것은 실제로 당신을 위해 실제로 작동하지만 이상합니다. _token은 CSRF 토큰이며 세션 ID와 같지 않아야한다고 생각합니다. – rzb