2016-06-01 3 views
2

일부 기존 코드에서 일부 단위 테스트를 수행하려고합니다. 내 컨트롤러는Laravel 5.0 세션 변수의 단위 테스트 문제

class DefaultController extends Controller 
{ 
    public function index() { 
     if (!Session::get('answers', [])) { 
      App::abort(403, 'Error.'); 
     } 

     // Do rest of the stuff here 
    } 
} 

같은 것을보고 내 테스트 클래스는 잘 작동 세션없이

class DefaultController extends extends TestCase { 
    public function testIndex_withoutSession() { 
     // Arrange 
     /* Nothing to arrange now */ 

     // Act 
     $this->action('GET', '[email protected]'); 

     // Assert 
     $this->assertResponseStatus(403); 
    } 

    public function testIndex_withSession() { 
     // Arrange 
     $this->session(['answers' => array()]); 

     // Act 
     $this->action('GET', '[email protected]'); 

     $this->assertSessionHas('answers'); 
     // this function is giving true 

     // Assert 
     $this->assertResponseStatus(200); 

     $this->flushSession(); 
    } 
} 

내 테스트 케이스 같이 보입니다하지만 난 세션 변수 '답'을 조롱하여 확인하고자 할 때 그것은 여전히 ​​나에게 오류를주고있다. 누구든지 내가 뭘 잘못하고 있는지 또는 어떻게 제대로 할 수 있는지 생각함으로써 나를 도울 수 있습니까? 이 코드가 없으면 코드 검사를 더 이상 진행할 수 없습니다. 미리 감사드립니다.

답변

1

오타 (answer)가 아닌 답변 배열에는 컨트롤러에서 허위 검사를 통과하기 위해 적어도 하나 이상의 요소가 필요합니다. 테스트 케이스 (200)

을 주장 하나 테스트 케이스에 값을 추가하지 않습니다 :

$this->session(['answers' => array('something')]); 

을 또는 컨트롤러 변경 : 귀하의 답변에 대한

if (!Session::has('answers')) { 
+0

답변 해 주셔서 감사합니다. 테스트는 주요 기존 코드를 만지는 것이 아니므로 테스트 기능에서 변경했습니다. 그리고 지금은 매우 잘 작동하고 있습니다. –

0

당신은 $this->session(['answers' => array()]); 을하지만 당신은 여기 $this->assertSessionHas('answer'); 여분 또는 누락의 '대답은 문제가 대답 대신 대답을 찾고 있습니다.

+0

감사합니다. 이 코드를 다시 작성하는 동안 오타가되었습니다. 그러나 여전히 실패했다. @MrCode의 해결책은 나에게 결과를 주었다. 나는 다른 사람이 여기에서 좋은 해결책을 얻을 것이라고 검색하는 것처럼 코드에서 내 오타를 편집하고 있습니다. –