В настоящее время я пишу несколько тестов для своих контроллеров Symfony. Я использую в нем конвертер параметров Doctrine, и я не могу найти способ издеваться над ним в своем тестовом наборе!Mock doctrine param converter при тестировании контроллера Symfony
Мой контроллер выглядит следующим образом:
/**
* @Security("has_role('ROLE_USER')")
* @Route("/troops/{troop_id}/membership-requests/{id}/accept", name="accept_membership_request", methods={"POST"})
* @param \AppBundle\Controller\MembershipRequest $membershipRequest
*/
public function acceptMembershipRequest(MembershipRequest $membershipRequest) {
$troop = $membershipRequest->getTroop();
if($this->get('kilix_abac.security')->enforce('troop_leadership', $this->getUser(), $troop) !== true) {
throw new AccessDeniedHttpException('troops.access_denied');
}
$this->get('medievistes.troop.membership_request_manager')->acceptMembershipRequest($membershipRequest);
return new JsonResponse([
'redirection_url' => $this->generateUrl('troop_dashboard', ['id' => $membershipRequest->getTroop()->getId()])
]);
}
Соответствующий метод испытаний
public function testAcceptMembershipRequest() {
$client = $this->createLoggedClient();
$client->getContainer()->set('medievistes.troop.membership_request_manager', $this->getMembershipRequestManagerMock());
$client->getContainer()->set('kilix_abac.security', $this->getKilixAbacMock());
$client->request('POST', '/troops/1/membership-requests/1/accept');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$this->assertJson($client->getResponse()->getContent());
$this->assertArrayHasKey('redirection_url', json_decode($client->getResponse()->getContent(), true));
}
я, очевидно, получить ответ 404 вместо ожидаемого 200, в связи с тем, что запрос SQL выполняется в пустой тестовой базе данных. Я знаю, что я могу использовать приборы, я использовал его, и я все еще использую его для своих тестов репозитория, но я бы хотел избежать использования этого в этом контексте.
Если есть способ издеваться над этим конвертером, я был бы рад услышать об этом!
Thanks community!
По причине я не знаю, когда я высмеивать этот класс, то менеджер преобразователя параметров выбирает другой. Таким образом, макет неэффективен! Но когда высмеивается сам менеджер преобразователя параметров, он работает так, как предполагалось, вам просто нужно зарегистрировать обратный вызов, который сам заполнит данные в атрибутах запроса! Я поставлю окончательный код в своем вопросе как редактирование, но я даю вам правильный ответ: D! Спасибо вам :) ! – Kern
Прошу прощения, я знаю, что это немного старый вопрос, но я не вижу реализации этого метода $ this-> getMembershipRequestManagerMock(). У меня возникают проблемы с издевательским преобразованием параметров, и я буду признателен, если вы опубликуете реализацию этого метода. благодаря – Armando