2017-01-31 15 views
0

Это функция, которую я хочу проверить на менеджере (Генеалогия Manager.php) Когда я запускаю команду PHPUnit дает следующее сообщение об ошибке:Как проверить методы менеджера, потребляющие в QueryBuilder на Symfony2 с использованием PHPUnit

Call to a member function getSingleScalarResult() on null in /home/majri/Documents/projects/IadDirectoryApp/vendor/iad-holding/genealogy-bundle/Iad/Bundle/GenealogyBundle/Manager/GenealogyManager.php on line 77

/** 
* @param Genealogy $genealogy 
* @return mixed 
*/ 
public function getCountManagerialLevelsByGenealogy(Genealogy $genealogy) 
{ 
    $qb = $this->getRepository()->createQueryBuilder('gen'); 
    $qb->select('count(distinct(gen.level))') 
     ->where($qb->expr()->lt('gen.right', $genealogy->getRight())) 
     ->andWhere($qb->expr()->gt('gen.left', $genealogy->getLeft())) 
    ; 
    return $qb->getQuery()->getSingleScalarResult(); 
} 

** Моя функция тестирования единицы **

public function testGetCountManagerialLevelsByGenealogy() 
{ 
    $em = $this->getMockBuilder(EntityManager::class) 
     ->disableOriginalConstructor() 
     ->getMock(); 

    $repository = $this->getMockBuilder(EntityRepository::class) 
     ->disableOriginalConstructor() 
     ->getMock(); 

    $em->expects($this->once()) 
     ->method('getRepository') 
     ->with('IadGenealogyBundle:Genealogy') 
     ->will($this->returnValue($repository)); 

    $queryBuilder = $this->getMockBuilder(QueryBuilder::class) 
     ->setMethods(['select','where','setParameter','getQuery']) 
     ->disableOriginalConstructor() 
     ->getMock(); 

    $repository->expects($this->once()) 
     ->method('createQueryBuilder') 
     ->with('gen') 
     ->will($this->returnValue($queryBuilder)); 

    $queryBuilder->expects($this->at(0)) 
     ->method('select') 
     ->will($this->returnValue($queryBuilder)); 

    $queryBuilder->expects($this->at(1)) 
     ->method('where') 
     ->will($this->returnValue($queryBuilder)); 

    $queryBuilder->expects($this->at(2)) 
     ->method('setParameter') 
     ->will($this->returnValue($queryBuilder)); 

    $getQuery = $this->getMockBuilder('\Doctrine\ORM\AbstractQuery') 
     ->setMethods(array('setParameter', 'getSingleScalarResult')) 
     ->disableOriginalConstructor() 
     ->getMockForAbstractClass(); 


    $getQuery->expects($this->once()) 
     ->method('setParameter') 
     ->will($this->returnValue($queryBuilder)); 

    $getQuery->expects($this->any()) 
     ->method('getSingleScalarResult') 
     ->will($this->returnValue(3)); 

    $queryBuilder->expects($this->at(3)) 
     ->method('getQuery') 
     ->will($this->returnValue($getQuery)); 


    $genealogyManager = new GenealogyManager($em); 

    $this->assertEquals(3, $genealogyManager->getCountManagerialLevelsByGenealogy($this->buildMockGenealogy(9))); 
} 

ответ

0

Я не уверен, если это единственная ошибка, но ваш запрос должен быть настройка параметров правильно так:

$qb->select('count(distinct(gen.level))') 
    ->where($qb->expr()->lt('gen.right', ':getRight')) 
    ->andWhere($qb->expr()->gt('gen.left', ':getLeft')) 
    ->setParameters(array(
     'genRight' => $genealogy->getRight(), 
     'genLeft' => $genealogy->getLeft() 
    )) 
; 
+0

Благодарим вас за ответ, но у меня нет проблем на уровне запроса, но на уровне модульного теста – user3046915

 Смежные вопросы

  • Нет связанных вопросов^_^