में AuthComponent का उपयोग करता है, मैं एक नियंत्रक क्रिया का परीक्षण करने की कोशिश कर रहा हूं जो उपयोगकर्ता प्रोफाइल के संस्करण की अनुमति देता है। अन्य चीजों के अलावा मैं यह जांचना चाहता हूं कि प्रत्येक लॉग इन उपयोगकर्ता केवल अपनी प्रोफ़ाइल संपादित कर सकता है, न कि अन्य। इस प्रतिबंध को तोड़ने के मामले में कार्रवाई को पूर्वनिर्धारित होम पेज पर रीडायरेक्ट करना होगा।एक नियंत्रक के लिए इकाई परीक्षण लिखें जो केकपीएचपी 2
इस परिदृश्य के साथ, मैं एक दृढ़ कि आईडी के साथ एक उपयोगकर्ता बनाता है = 1. इसलिए मैं प्रतिबंध इस तरह के परीक्षण पर सोच रहा था:
$data = $this->Users->User->read(null, 1);
$this->Users->Auth->login($data);
$this->testAction('/users/edit/2', array('method' => 'get'));
$url = parse_url($this->headers['Location']);
$this->assertEquals($url['path'], '/homepage');
परीक्षण इस ज़ोर से गुजरता है।
$this->testAction('/users/edit/1', array('method' => 'get', 'return' => 'vars'));
$matcher = array(
'tag' => 'form',
'ancestor' => array('tag' => 'div'),
'descendant' => array('tag' => 'fieldset'),
);
$this->assertTag($matcher, $this->vars['content_for_layout'], 'The edition form was not found');
हालांकि इस ज़ोर विफल रहता है: तो अगले कदम अगर '/users/edit/1'
, जो लॉग इन उपयोगकर्ता की आईडी है क्रियान्वित की जाँच करने के लिए है, प्रपत्र को दर्शाता है। debug()
के साथ खुदाई करने के बाद मुझे पता चला है कि $this->Auth->user()
पूरी जानकारी देता है लेकिन $this->Auth->user('id')
null
देता है। चूंकि मैं बाद में कार्रवाई के भीतर तुलना में उपयोग करता हूं, यह गलत के रूप में मूल्यांकन करता है और असफल होने के लिए परीक्षण का कारण बनता है।
उत्सुक बात यह है कि यह तब होता है जब परीक्षण होता है लेकिन ब्राउज़र में कार्रवाई निष्पादित करते समय नहीं होता है। तो, इस कार्रवाई का परीक्षण करने का सही तरीका क्या है?
धन्यवाद!
$this->Auth->user('id')
इनमें से किसी एक का प्रयास करें::
यदि आपको 'जेनरेट()' का उपयोग करना है तो 'कंट्रोलरटेस्टकेस' का उपयोग करने के बाद क्या बिंदु है? – elitalon
जेनरेट() केवल कंट्रोलरटेस्टकेस में उपलब्ध है और यह आपके testAction() को आसान बनाने के लिए प्रदान किया जाता है, जैसे नियंत्रक विधियों, घटकों, मॉडल इत्यादि करने में सक्षम होना। यदि आप स्वयं उत्पन्न() स्वयं को कॉल नहीं करते हैं, तो testAction () केकपीएचपी डिफ़ॉल्ट के साथ आंतरिक रूप से आपके लिए यह करेगा (_stop() और रीडायरेक्ट() फ़ंक्शन का मजाक कर रहा है) –
मैंने सोचा कि 'उत्पन्न() वास्तव में कुछ और किया है। यही कारण है कि मैंने सोच रहा था कि क्यों 'नियंत्रक टेस्टकेस' ने मुझे डिफ़ॉल्ट कॉन्फ़िगरेशन प्रदान किया है। मैं आपका उत्तर आज़माउंगा और आपको बता दूंगा :) – elitalon