सत्रों को लागू करने वाले नियंत्रक विधि पर नियंत्रक आधारित इकाई परीक्षण चलाने की कोशिश करते समय मैं किसी समस्या में भाग रहा हूं।PHPUnit Symfony2 सत्रों में विफल रहा
/**
* @Route("/api/logout")
*/
public function logoutAction()
{
$session = new Session();
$session->clear();
return $this->render('PassportApiBundle:Login:logout.html.twig');
}
और कार्यात्मक परीक्षण:
public function testLogout()
{
$client = static::createClient();
$crawler = $client->request('GET', '/api/logout');
$this->assertTrue($client->getResponse()->isSuccessful());
}
त्रुटि है कि उत्पादन किया जाता है:
Failed to start the session because headers have already been sent. (500 Internal Server Error)
मैं कोशिश की है
इस मामले में, यहाँ नियंत्रक विधि है परीक्षण में $this->app['session.test'] = true;
में रखकर, लेकिन अभी भी नहीं जाना है। क्या किसी ने इस तरह के किसी मुद्दे को हल करने का प्रयास किया है जो एक सत्र का उपयोग करने वाले नियंत्रक को यूनिट परीक्षण कर रहा है?
यदि आप 'सत्र' वर्ग (https://github.com/symfony/symfony/blob/2.1/src/Symfony/Component/HttpFoundation/Tests/Session/SessionTest.php) के लिए परीक्षण देखते हैं, तो यह ऐसा लगता है कि सत्र शुरू करने से बचने के लिए आपको 'MockArraySessionStorage' का एक उदाहरण इंजेक्ट करना चाहिए। – Sven
मैंने उन पंक्तियों को सेट अप किया है, हालांकि, मैं इसे '$ क्लाइंट = स्थिर :: createClient();' में कैसे पास करूं? अकेले उन पंक्तियों को जोड़ना एक ही त्रुटि के परिणामस्वरूप होता है। –
हां, समस्या यह है कि आपका नियंत्रक कुछ भी इंजेक्ट करने की पेशकश नहीं करता है। 'नए' ऑपरेशन में कोई पैरामीटर नहीं है, और किसी भी तरह से परीक्षण से कुछ भी पास करने का कोई तरीका नहीं होगा। लेकिन मुझे लगता है कि सिम्फनी 2 इसके लिए डीआई ढांचे को प्रयोग करने में सक्षम होना चाहिए। क्या आपने इसे उदाहरण के लिए पढ़ा है: http://stackoverflow.com/questions/10106195/symfony-2- निर्भरता- इंजेक्शन-di-of-controllers इसके अतिरिक्त, सिम्फनी दस्तावेज़ इस तरह के सत्र में आने का सुझाव देते हैं: '$ session = $ यह-> getRequest() -> getSession(); '- यह PHPUnit बूटस्ट्रैपिंग को मॉक सत्र ऑब्जेक्ट्स – Sven