Am Anfang möchte ich sagen - Ich bin neu in Komponententests in PHP (phpunit). In meinem neuen Projekt (slim3 framework) würde ich gerne meine Controller wie zB LoginController testen.Controller Einheit Test in slim3
Meine Idee ist (in Unit-Test-Methode)
- erstellen Instanz
LoginController
- Mock einige Dienste in der Steuerung (DI)
- Execute-Methode, die Antwort auf Anforderung (in meinem Controller Methode
__invoke
)
Mein Problem ist über Parameter für __invoke
Methode. In Slim3 aufrufbar Verfahren zur Anfrage hat zwei ersten params:
RequestInterface $request
und ResponseInterface $response
Wie kann ich diese Parameter in meiner Unit-Test-Klasse zu erstellen? Ich suchte nach einigen Beispielen für dieses Problem, aber ohne Erfolg.
Irgendwelche Vorschläge?
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;
}
Aber ich bin nicht sicher, das ist gut so:
Ich habe einige Code in Slim3 Tests Mock Anfrage gefunden.
Vielen Dank für jede Hilfe
Das funktionierte gut für mich! Danke @rob (Die Lösung, die auf Ihrer Website geschrieben wurde, war auch hilfreich) –
Danke für diesen Code, @ rob-allen! Wie würden Sie vorschlagen, dass wir etwas Ähnliches tun, wenn unsere Routen durch anonyme Funktionen definiert sind? (Zum Beispiel: '$ app-> get ("/test/{id} ", Funktion ($ request, $ response, $ args) {...});') – rinogo
Ich habe es herausgefunden. Für diejenigen, die neugierig sind, müssen Sie Ihre anonyme Funktion in eine benannte Funktion (z. B. "echo_action()") machen. Verwenden Sie dann anstelle von $ action = new \ App \ Action \ EchoAction(); '' $ action = "echo_action"; ' – rinogo