2017-02-15 6 views
1

私は現在、私のSymfonyコントローラ用にいくつかのテストを書いています。 Doctrine param converterを使用しています。私はテストスイートでそれを模擬する方法を見つけることができません!Symfonyコントローラをテストするときにdoctrine param converterを模擬する

のように私のコントローラはなります関連する試験方法は

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)); 
} 

ある

/** 
* @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()]) 
    ]); 
} 

私は、明らかにSQLクエリが実行されるという事実による代わりに予想される200の404応答を取得空のテストデータベースに保存します。私は、私はそれを使用し、私はまだ私のリポジトリのテストに使用する備品を使用することができます知っているが、私はこの文脈でそれを使用しないでください。

このコンバータをモックする方法があれば、私はそれについて聞いてうれしいです!

ありがとうコミュニティ!

答えて

2

データベース内の情報を検索するparam convertをモックできます。したがって、sensio_framework_extra.converter.doctrine.ormの下にあるデータベース内のオブジェクトを検索するモックサービスを作成することができます。または、クラス名のクラスパラメータ値を変更するだけで済みます。あなたはrequest_membership_managerとセキュリティのためにやっている、これはあなたが同じようにリクエストを投稿する必要があります前に、もちろん

sensio_framework_extra.converter.doctrine.class 

:私は知らない理由

$client->getContainer()->set(
    'sensio_framework_extra.converter.doctrine.orm', 
    $this->getDoctrineConvertMock() 
); 
+0

私はこのクラスをモックする場合、 paramコンバータマネージャは別のものを選択します。だから模擬は効果がない!しかし、param converter manager自体を嘲笑するとき、それは意図したように機能します。あなたは、リクエスト属性のデータをあなた自身で設定するコールバックを登録しなければなりません!私は最終的なコードを私の質問に編集として入れますが、私はあなたに正しい答えを与えます:D!ありがとうございます :) ! – Kern

+1

申し訳ありませんが、これはちょっと古い質問ですが、このメソッドの実装が表示されません。$ this-> getMembershipRequestManagerMock()私はparamコンバーターを嘲笑することに問題があります。このメソッドの実装を投稿できるのであれば、私は感謝します。ありがとう – Armando

関連する問題