I’m trying to mock a repository containing all modules, and it has a method called findAll() that returns all elements from that repository. I cant seem to be able to pull any data from the mocked repository. Any ideas how I could fix it?
Mocking repository:
$moduleRepository = $this->createMock(ModuleRepository::class);
Trying to use method from ModuleRepository class called findAll() that returns all elements from the repo in an array.
$moduleRepository->expects($this->any()) ->method('findAll') ->willReturn([]);
Thats what I get when I print $moduleRepository:
Mock_ModuleRepository_f6bead1c Object ( [_entityName:protected] => [_em:protected] => [_class:protected] => [__phpunit_originalObject:Mock_ModuleRepository_f6bead1c:private] => [__phpunit_returnValueGeneration:Mock_ModuleRepository_f6bead1c:private] => 1 [__phpunit_invocationMocker:Mock_ModuleRepository_f6bead1c:private] => PHPUnitFrameworkMockObjectInvocationHandler Object ( [matchers:PHPUnitFrameworkMockObjectInvocationHandler:private] => Array ( [0] => PHPUnitFrameworkMockObjectMatcher Object ( [invocationRule:PHPUnitFrameworkMockObjectMatcher:private] => PHPUnitFrameworkMockObjectRuleAnyInvokedCount Object ( [invocations:PHPUnitFrameworkMockObjectRuleInvocationOrder:private] => Array ( ) ) [afterMatchBuilderId:PHPUnitFrameworkMockObjectMatcher:private] => [afterMatchBuilderIsInvoked:PHPUnitFrameworkMockObjectMatcher:private] => [methodNameRule:PHPUnitFrameworkMockObjectMatcher:private] => PHPUnitFrameworkMockObjectRuleMethodName Object ( [constraint:PHPUnitFrameworkMockObjectRuleMethodName:private] => PHPUnitFrameworkMockObjectMethodNameConstraint Object ( [methodName:PHPUnitFrameworkMockObjectMethodNameConstraint:private] => findAll [exporter:PHPUnitFrameworkConstraintConstraint:private] => ) ) [parametersRule:PHPUnitFrameworkMockObjectMatcher:private] => [stub:PHPUnitFrameworkMockObjectMatcher:private] => PHPUnitFrameworkMockObjectStubReturnStub Object ( [value:PHPUnitFrameworkMockObjectStubReturnStub:private] => Array ( ) ) ) ) [matcherMap:PHPUnitFrameworkMockObjectInvocationHandler:private] => Array ( ) [configurableMethods:PHPUnitFrameworkMockObjectInvocationHandler:private] => Array ( [0] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => findAllModuleRoutes [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeSimpleType Object ( [name:SebastianBergmannTypeSimpleType:private] => array [allowsNull:SebastianBergmannTypeSimpleType:private] => [value:SebastianBergmannTypeSimpleType:private] => ) ) [1] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => findAllQueryBuilderWithSearch [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeObjectType Object ( [className:SebastianBergmannTypeObjectType:private] => SebastianBergmannTypeTypeName Object ( [namespaceName:SebastianBergmannTypeTypeName:private] => DoctrineORM [simpleName:SebastianBergmannTypeTypeName:private] => QueryBuilder ) [allowsNull:SebastianBergmannTypeObjectType:private] => ) ) [2] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => findListResults [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeSimpleType Object ( [name:SebastianBergmannTypeSimpleType:private] => array [allowsNull:SebastianBergmannTypeSimpleType:private] => [value:SebastianBergmannTypeSimpleType:private] => ) ) [3] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => createQueryBuilder [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [4] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => createResultSetMappingBuilder [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [5] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => createNamedQuery [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [6] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => createNativeNamedQuery [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [7] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => clear [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [8] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => find [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [9] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => findAll [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [10] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => findBy [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [11] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => findOneBy [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [12] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => count [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [13] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => __call [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [14] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => getClassName [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) [15] => PHPUnitFrameworkMockObjectConfigurableMethod Object ( [name:PHPUnitFrameworkMockObjectConfigurableMethod:private] => matching [returnType:PHPUnitFrameworkMockObjectConfigurableMethod:private] => SebastianBergmannTypeUnknownType Object ( ) ) ) [returnValueGeneration:PHPUnitFrameworkMockObjectInvocationHandler:private] => 1 [deferredError:PHPUnitFrameworkMockObjectInvocationHandler:private] => ) )
I tried it like this and the method actually gets called, but the repo has no data for it to find.
$moduleRepository->expects($this->any()) ->method('findAll') ->willReturn([]); $myDebugVar = $moduleRepository->findAll(); fwrite(STDERR, print_r($myDebugVar, TRUE));
Output:
Array()
Advertisement
Answer
Your moduleRepository
will always return empty array, because you said to do it.
here you said to return an empty array []
:
->willReturn([]);
from method findAll
:
->method('findAll')
There are some ways how to handle it, but for now, I recommend you to create a new database only for testing purposes, then create a new .env.test
file which will extend the original .env
file and use the exact repository instead of mock.
# .env.test.local DATABASE_URL="mysql://USERNAME:PASSWORD@127.0.0.1:3306/DB_NAME?serverVersion=5.7"
namespace AppTestsRepository; use DoctrineORMEntityManager; use SymfonyBundleFrameworkBundleTestKernelTestCase; final class SomeTest extends KernelTestCase { private ?EntityManager $entityManager; protected function setUp(): void { $kernel = self::bootKernel(); $this->entityManager = $kernel->getContainer() ->get('doctrine') ->getManager(); } public function testSomething() { //given $moduleRepository = $this->entityManager->getRepository(ModuleRepository::class); //when $result = $moduleRepository->findAll(...); //then $this->assertEquals(...); } protected function tearDown(): void { parent::tearDown(); // doing this is recommended to avoid memory leaks $this->entityManager->close(); $this->entityManager = null; } }
Be sure you will fill up a new database with the data. It’s a good idea to create fixtures for doing it automatically and clean up the database on tearDown
method.