1
我目前正在爲我的Symfony控制器編寫一些測試。我在其中使用了Doctrine param轉換器,並且我無法找到在我的測試套件中嘲笑它的方法!測試Symfony控制器時模擬教條param轉換器
我的控制器看起來像:
/**
* @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查詢執行的事實在一個空的測試數據庫上。我知道我可以使用燈具,我使用它,並且仍然將它用於我的存儲庫測試,但是我想避免在此情況下使用它。
如果有一種方法來模擬這個轉換器,我很樂意聽到它!
感謝社區!
對於原因,我不知道,當我嘲笑這個類中, param轉換器經理挑選另一個。所以這個模擬是無效的!但是,當嘲諷參數轉換器管理器本身時,它的工作方式就像預期的那樣,您只需註冊一個回調,它將自己填充請求屬性中的數據!我將把最終代碼放在我的問題中作爲編輯,但我給你正確的答案:D!謝謝 :) ! – Kern
對不起,我知道這是一個老問題,但我沒有看到這個方法的實現$ this-> getMembershipRequestManagerMock()。我有問題嘲笑一個參數轉換器,我會很感激,如果你可以發佈這個方法的實現。謝謝 – Armando