2017-10-05 82 views
1

我有一個包含類似下面的一些代碼控制器動作中使用:如何嘲笑學說服務控制器動作時學說別處

$repository = $this->get("doctrine")->getRepository(User::class); 
$user = $repository->findOneBy(array('username' => $request->request->get("username"))); 

我想嘲笑庫。起初,我不知道該怎麼做,但後來我發現這個SO帖子:Testing Controllers in Symfony2 with Doctrine

從那裏的答案,我推測,我應該創建一個模擬的教條服務和存儲庫對象,並告訴mockbuilder存儲庫對象返回我想測試的實體。然後,我應該使用下面的代碼行替換學說服務:

$client->getContainer()->set("doctrine", $doctrineMockObject); 

,然後發出請求:

$client->request("POST", "/checkUsername"); 

的問題,這是有實際調用單獨的樹枝模板控制器的行爲,而且該行爲也使用原則。所以這會導致應用程序中斷,因爲它使用了我注入到容器中的模擬教義對象。

有沒有什麼辦法只爲我正在測試的操作使用模擬教義服務?否則,有沒有其他方法可以做我想做的事情?我沒有想法。

回答

0

作爲'替代方法',您可以停止使用Container作爲服務定位器,而不是將它注入到所有位置,只將需要的服務注入到控制器/其他服務中。