2017-03-06 4 views
0

나는 phpunit을 테스트를 코딩하고있어이 실패있어 : 뭔가 테스트 케이스에서 잘못되면phpunit을 테스트를

Tests\Professor\Controller\DisciplinaControllerTest::testListaDisciplinas 
Failed asserting response code "200", actual status code is "500" 

좀 더 정보를 얻으려면, 나는에 보호 $ traceError 멤버를 설정 참된. 내 쿼리가 매기기 개체를 반환 내 테스트 배열를 기대 때문에 이런 일이

Tests\Professor\Controller\DisciplinaControllerTest::testListaDisciplinas 
Argument 1 passed to Doctrine\ORM\Tools\Pagination\Paginator::cloneQuery() must be an instance of Doctrine\ORM\Query, array given, called in /uov-videos/www/david/plataovirtual/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/Paginator.php on line 239 and defined 

: 그리고이 오류가 발생했습니다. 테스트에서 사용할 Paginator를 어떻게 인스턴스화합니까?

phpunit을 기능 코드 : 내 컨트롤러 내부

public function testListaDisciplinas() 
{ 
    $this->auth(); 
    // simulate the repository to not affect the db 
    $disciplinaRepository = $this->getMock('Domain\Model\Disciplina\DisciplinaRepository'); 

    $disciplinaRepository->method('getByProfessorTutor') 
         ->willReturn(array()); 

    $serviceManager = $this->getApplicationServiceLocator(); 
    $serviceManager->setAllowOverride(true); 
    $serviceManager->setService('DisciplinaRepository', $disciplinaRepository); 

    // Route to getList() above 
    $result = $this->dispatch('/uov/professor/disciplinas'); 
    $this->assertResponseStatusCode(200); 
} 

: 내 저장소 내부

public function getList() 
{ 
    $usuario = $this->getSessaoUsuario(); 

    $professor = $this->professorRepository()->getByUsuario($usuario); 

    $disciplinas = $this->disciplinaRepository()->getByProfessorTutor($professor); 

    $adapter = new DoctrinePaginator($disciplinas); 
    $paginator = new Paginator($adapter); 
    $paginator->setDefaultItemCountPerPage(20); 

    $view = new ViewModel(array(
     'disciplinas' => $paginator, 
    )); 

    $request = $this->getRequest(); 

    $view->setTerminal($request->isXmlHttpRequest()); 

    return $view; 
} 

기능 :

public function getByProfessorTutor(Professor $professor) 
{ 
    $query = $this->em->createQueryBuilder(); 

    $query->select('d') 
      ->from($this->class, 'd') 
      ->leftJoin('Domain\Model\Turma\Turma', 't', 'WITH', 't.disciplina = d') 
      ->leftJoin('Domain\Model\Professor\ProfessorTurma', 'pt', 'WITH', 'pt.turma = t.id') 
      ->where('(t.professor = :professor OR pt.professor = :professor)') 
      ->setParameter('professor', $professor); 

    return new Paginator($query, $fetchJoinCollection = false); 
} 
+0

누군가가 나를 도와 주면 코드를 게시하는 것이 좋습니다. – feedMe

+0

감사합니다. @feedMe, 내 질문을 업데이트했습니다. –

+0

테스트에 대한 단서가 없지만 컨트롤러에 저장소가있는 것은 MVC 모범 사례에 좋지 않습니다. 그냥 충고하는 것입니다 :) – Hooli

답변

0

나는이 문제를 해결하기 위해 관리. 여기서는 Doctrine Paginator 객체를 시뮬레이트하는 코드를 설명합니다.

public function testListaDisciplinas() 
{ 
    $this->auth(); 
    // simulate the repository to not modify the db 
    $disciplinaRepository = $this->getMock('Domain\Model\Disciplina\DisciplinaRepository'); 

    $em = $this->getApplicationServiceLocator()->get('Doctrine\ORM\EntityManager'); 

    $query = $em->createQueryBuilder(); 
    $query->select('d') 
      ->from('Domain\Model\Disciplina\Disciplina', 'd') 
      ->setMaxResults(1); 

    $disciplinaRepository->method('getByProfessorTutor') 
         ->willReturn(new Paginator($query, $fetchJoinCollection = false)); 

    $serviceManager = $this->getApplicationServiceLocator(); 
    $serviceManager->setAllowOverride(true); 
    $serviceManager->setService('DisciplinaRepository', $disciplinaRepository); 
    $result = $this->dispatch('/uov/professor/disciplinas'); 
    $this->assertResponseStatusCode(200); 
} 
관련 문제