سؤال

أنا أكتب اختبارات لمشروعي الحالي، المصنوع باستخدام Zend Framework.كل شيء على ما يرام، ولكن لدي مشكلة في اختبار إجراءات/وحدات التحكم للمستخدمين المسجلين:أحتاج إلى تسجيل الدخول حتى أتمكن من تنفيذ الإجراء/وحدة التحكم.

كيف يمكنني تسجيل الدخول إلى PHPUnit؟

هل كانت مفيدة؟

المحلول

وأما أنت تقول كنت ترغب في اختبار الإجراءات / وحدات التحكم، وأنا افترض أنك لا ريتينغ اختبارات الوحدة، ولكن اختبارات وظيفية / التكامل - أي العمل مع Zend_Test والاختبار عن طريق MVC

وهنا هو وظيفة اختبار I المستخدمة في المشروع، حيث أنا على اختبار إذا تسجيل الدخول غير موافق:

public function testLoggingInShouldBeOk()
{
    $this->dispatch('/login/login');
    $csrf = $this->_getLoginFormCSRF();
    $this->resetResponse();
    $this->request->setPost(array(
        'login' => 'LOGIN',
        'password' => 'PASSWORD',
        'csrfLogin' => $csrf,
        'ok' => 'Login',
    ));
    $this->request->setMethod('POST');
    $this->dispatch('/login/login');
    $this->assertRedirectTo('/');
    $this->assertTrue(Zend_Auth::getInstance()->hasIdentity());
}

وببساطة: أنا تحميل نموذج تسجيل الدخول، واستخراج رمز CSRF، ملء استمارة، ونشرها

وبعد ذلك، يمكنني معرفة ما إذا أنا متصل.

و
مع ذلك، يمكنك على الأرجح استخراج جزء من قطع الأشجار في، أن نسميها قبل كل واحد من الاختبارات الخاصة بك التي تتطلب مستخدم صالح أن تكون متصلا.

نصائح أخرى

وهناك طريقة أخرى. على كيان User بلدي لدي طريقة login() أن يضع معرف المستخدم في الدورة ومتغير ثابت. ما أنا فقط القيام به في setUp() الاختبار هو دعوة $user->login() ويعمل. في اختبار لا تستخدم جلسات البيئة (وضع Zend_Session::$isUnitTested = true لديها هذا التأثير) واختبارات تعتمد على متغير ثابت. فقط تذكر لمسح متغير ثابت (logout() المستخدم) على tearDown().

وأعتقد أن هذا المقال يمكن أن تساعدك: http://perevodik.net/en/posts/7/ فهو يصف كيفية خلق هوية وهمية يمكنك استخدامها لتعيين البيئة إلى ما يعادل الدولة إلى مستخدم يتم دخولك.

بنفس الطريقة التي يستخدم بها باسكال هذه الوظيفة:

$this->_getLoginFormCSRF();

لقد قمت بإنشاء دالة عامة تقوم بإرجاع القيمة عن طريق تحميل النموذج باستخدام مدير عناصر النموذج:

الوظيفة العامة _getcsrfhashvaluefromform ($ formalias ، $ csrfname) {$ form = $ this-> servicemanager-> get ('formelementManager')-> get ($ formalias) ؛إرجاع $form->get($csrfName)->getValue();}

يفترض هذا بالطبع أن CSRF مرتبط بالنموذج وليس ضمن أي مجموعة حقول وما إلى ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top