Başta şunu söylemek isterim - PHP'de ünite testinde yeniyim (phpunit). Yeni projemde (slim3 framework) Denetleyicileri örneğin LoginController gibi test etmek istiyorum.Denetleyici birim testi, thin3
Benim fikir (birim testi yöntemi)
- kontrolörde
LoginController
- Mock bazı hizmetlerin örneği oluşturma (DI)
- benim denetleyicileri yöntemde
__invoke
istek için yanıt (bir yöntemi Yürütme
Sorunum, __invoke
yöntemiyle ilgili parametrelerle ilgilidir.
RequestInterface $request
ve ResponseInterface $response
nasıl birim test sınıfında bu parametreler oluşturabilirsiniz: istek için Slim3 çağrılabilir yöntemde iki birinci params vardır? Bu konuyla ilgili bazı örnekleri araştırıyordum ama başarılı olamadım.
Herhangi bir öneriniz var mı?
Ben sahte isteğine Slim3 testlerinde bazı kod buldum:
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;
}
Ama bu iyi bir yoldur emin değilim. https://akrabat.com/testing-slim-framework-actions/
Ben $request
oluşturmak için Environment::mock()
kullanmak ve sonra eylemi çalıştırabilirsiniz: herhangi bir yardım
Bu benim için çok çalıştı! Teşekkürler @rob (Web sitenize çözüm yazınız da yardımcı oldu) –
Bu kod için teşekkürler, @ rob-allen! Rotalarımız anonim işlevlerle tanımlanmışsa benzer bir şeyi nasıl yapmamızı önerirsiniz? (Örneğin: $ app-> olsun ("/ test/{id}", işlev ($ request, $ response, $ args) {...}); ') – rinogo
Bunu çözdüm. Merak edenler için, anonim işlevinizi adlandırılmış bir işleve (ör. "Echo_action()") yapmanız gerekir. Ardından, $ action = new \ App \ Action \ EchoAction(); 'yerine,' $ action = "echo_action" işlevini kullanın; – rinogo