2013-09-26 8 views
10

$this->call($destination, $parameters, 'GET'); kullanarak test denetleyicileriyle ilgili birçok belgeyi okudum, ancak bu da ayarlanmış olan rotaya güveniyor gibi görünüyor ve doğru $destination kullanın.Birleştirmeyi test etmeden Laravel'de bir denetleyiciyi test etmenin en iyi yolu nedir?

Genellikle bu sorun değil, ancak bir yoldan bir denetleyiciye erişim, birim testi için doğru görünmüyor. Kontrol cihazını test etmek istiyorum, rotayı değil. Rotalarla uğraşmadan ünite test kontrolörlerine standart bir yol var mı?

Sadece el ile denetleyiciyi başlatıyor ve yöntemi yeterince çağırıyor mu? Örneğin.

$controller = new MyController; 
$response = $controller->someMethod($param); 
$this->assertSomething($response); 

Belki kontrolörler birimi test edilmemelidir (ve sadece kabul testleri) ve talebim benim denetleyicileri çok ağır bir işaretidir.

+1

, kaldırıldı. Laravel'i iyi tanıdığımdan değil, ama kendi denemeniz gereken ilk soru - sadece kontrolörün bir örneğini. Eğer Laravel'le ilgili bir Hizmet Konteyneri varsa ve eğer kontrol cihazınız bunu kullanırsa, o zaman alay etmek için ihtiyacınız olan bazı işbirlikçileriniz olabilir, fakat belki de bunu bir TestCase'de kapsülleyebilir ve birim-test kontrol cihazlarını tutmak için bundan uzatabilirsiniz. daha yakışıklı. Ama yazma testleri kod yazmak gibidir, eğer işe yararsa denemelisiniz. – hakre

+0

Denetleyiciyi denemek şu ana kadar gayet iyi çalışıyor gibi gözüküyor ama endişeleniyorum "Laravel yolu" değil. Test vakamı, "uygulama" DIC'sini otomatik olarak ayarlayan Laravel'den genişletiyorum. – dave1010

+1

Eğer DIC uygulamasını iki katına çıkartan testlerle ayarlarsa, bu muhtemelen test için sorun teşkil etmez. Eğer değilse, şeyler balık olabilir. Muhtemelen Laravel IRC sohbetinde bunu biraz tartışmalısınız, bu tür geri bildirimlerin orada yapıldığını hayal edebiliyorum. Orada millet de Laravel hakkında daha fazla bilgi anlatabilirim sonra yapabilirim. – hakre

cevap

12

Doğruca eylemleri çağırabilir:

$response = $this->action('GET', '[email protected]', ['id' => 1]); 
+0

Bu iyi bir adımdır. Doğru HTTP yöntemini (örn. "GET") bilmek zorunda mıyım? – dave1010

+0

Evet, test aracının işlem yönteminin HTTP yöntemine ihtiyacı vardır ve testlerinizde kapsamlı olmalısınız, bu yüzden iyi bir uygulamadır. –

+1

Amacım, denetleyicinin (ör. 'OrdersController :: show()'), rotanın HTTP yöntemine bağlı olmaması ve bunu bilmemesi gerektiğidir. – dave1010

3

action yöntem Belki Olası laravel 5.4 Muhtemelen testing api