4
首先,我想說 - 我是PHP(phpunit)單元測試新手。 在我的新項目(slim3框架)中,我想測試我的控制器,例如LoginController。slim3控制器單元測試
我的想法是(在單元測試方法)
- 在控制器創建的
LoginController
- 模擬一些服務實例(DI)
- 執行方法,該方法是用於請求響應(在我的控制器方法
__invoke
)
我的問題是關於__invoke
方法的參數。 在Slim3可調用的方法要求有兩個第一PARAMS:
RequestInterface $request
和ResponseInterface $response
我怎麼可以在我的單元測試類這個參數?我正在尋找這個問題的一些例子,但沒有成功。
有什麼建議嗎?
我發現在Slim3測試一些代碼來模擬請求:
protected function requestFactory()
{
$uri = Uri::createFromString('https://example.com:443/foo/bar?abc=123');
$headers = new Headers();
$cookies = array(
'user' => 'john',
'id' => '123',
);
$env = Slim\Http\Environment::mock();
$serverParams = $env->all();
$body = new Body(fopen('php://temp', 'r+'));
$request = new Request('GET', $uri, $headers, $cookies, $serverParams, $body);
return $request;
}
但我不知道這是很好的方式。
感謝所有幫助
這個工作對我來說太棒了!感謝@rob(在您的網站上寫出的解決方案也有幫助) –
感謝此代碼,@ rob-allen!如果我們的路線是通過匿名函數定義的,你會如何建議我們做類似的事情? (例如:'$ app-> get(「/ test/{id}」,function($ request,$ response,$ args){...});') – rinogo
我想通了。對於那些好奇的人,你需要將你的匿名函數轉換成命名函數(例如'echo_action()')。然後,使用'$ action =「echo_action」;' – rinogo