I try to create a test for a custom controller. In this one, this is what is executed:
Code
$users = $this->getDoctrine()
->getRepository('MyBundle:User')
->findAllOrderedByName();
In the test controller, this is what I am doing:
$entityManager = $this
->getMockBuilder('Doctrine\ORM\EntityManager')
->setMethods(['getRepository', 'clear'])
->disableOriginalConstructor()
->getMock();
$entityManager
->expects($this->once())
->method('getRepository')
->with('MyBundle:User')
->will($this->returnValue($userRepositoryMock));
// Set the client
$client = static::createClient();
$client->getContainer()->set('doctrine.orm.default_entity_manager', $entityManager);
Problem
But at the end the test fails because my mock seems to no be used:
tests\MyBundle\Controller\ListingControllerTest::testAllAction Expectation failed for method name is equal to string:getRepository when invoked 1 time(s). Method was expected to be called 1 times, actually called 0 times.
Any idea ?
EDIT
Following remarks on comments, I created a service:
services:
my.user.repository:
class: MyBundle\Entity\UserRepository
factory: ['@doctrine.orm.default_entity_manager', getRepository]
arguments:
- MyBundle\Entity\User
So now, I "just" have to mock the repo:
$userRepositoryMock = $this->getMockBuilder('MyBundle\Entity\UserRepository')
->disableOriginalConstructor()
->setMethods(['findAllOrderedByName'])
->getMock();
$userRepositoryMock
->expects($this->once())
->method('findAllOrderedByName')
->will($this->returnValue($arrayOfUsers));
and inject it into the container:
$client->getContainer()->set('my.user.repository', $userRepositoryMock);
But I still have the same issue