Я пытаюсь выполнить функциональное тестирование для моего контроллера API в symfony 3.4, но у меня возникают проблемы, поскольку у меня есть такой репозиторий.
class AdminRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Admin::class);
}
}
На самом деле, так как я внес эти изменения,Я решил добавить свои репозитории в мой контроллер следующим образом.
public function getMyReservationAction(Request $request, AdminRepository $adminRepos, ReservationRepository $reservationRepos)
{
$values = json_decode($request->getContent(), true);
return $this->verifValid(
Header::getToken($request)
, $values['reservation_id']
, $adminRepos
, $reservationRepos
);
}
Проблема в том, что я передаю свой AdminRepository в метод verifyValid, используя $ adminRepos для вызова базы данных.и я хотел бы проверить мой контроллер, поэтому решил смоделировать репозиторий следующим образом.
public function testGetMyReservationAction() {
$token = $this->createUser(true,'ROLE_USER');
$admin = new Admin();
$admin->setEmail('test@test.com');
// Now, mock the repository so it returns the mock of the admin
$adminRepos = $this->getMockBuilder(AdminRepository::class)
->disableOriginalConstructor()
->getMock();
$adminRepos->expects($this->any())
->method('findBy')
->willReturn(Array($admin));
$entityManager = $this
->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')
->disableOriginalConstructor()
->setMethods(['getRepository', 'clear'])
->getMock();
$entityManager
->expects($this->once())
->method('getRepository')
->with(Admin::class)
->will($this->returnValue($adminRepos));
$this->client->getContainer()->set('doctrine.orm.default_entity_manager', $entityManager);
// Set the client
$this->client->getContainer()->set('doctrine', $entityManager);
//Initialisation des paramètres
$params = [
'token' => $token
, 'reservation_id' => $this->getReservation()->getId()
];
//On appelle la route
$this->client->request('POST', '/auth/reservation/getone'
, array() , array()
, array('HTTP_AUTHORIZATION' => 'Bearer '. $token)
, json_encode($params)
);
//On vérifie que le code de retour est bien 200
$this->assertEquals(200 , $this->client->getResponse()->getStatusCode());
}
но он говорит мне, что мне нужно создать экземпляр моего ManagerRegistry ..
PHP Fatal error: Class Mock_ManagerRegistry_90efed4b contains 11 abstract methods and must therefore be declared abstract or implement the remaining
methods (Doctrine\Common\Persistence\ManagerRegistry::getDefaultManagerName, Doctrine\Common\Persistence\ManagerRegistry::getManager, Doctrine\Common
\Persistence\ManagerRegistry::getManagers, ...) in phar:///usr/local
/bin/phpunit/phpunit-mock-objects/Generator.php(263) : eval()'d code on line 1
Я не думаю,это нужно сделать, поэтому я думаю, что я делаю что-то не так, но я не знаю, где.
Не могли бы вы помочь мне, пожалуйста?Заранее спасибо.