Тестирование формы с капчей

Всё про тестирование в Yii 2.0
Ответить
andrew.pol
Сообщения: 50
Зарегистрирован: 2015.12.25, 17:39

Тестирование формы с капчей

Сообщение andrew.pol »

Как правильно написать тест к форме с капчей?

Есть простая форма:

Код: Выделить всё

<?php

namespace frontend\forms;

use yii\base\Model;

class ContactForm extends Model
{
    public $name;
    public $email;
    public $body;
    public $verifyCode;

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            ['name', 'required'],
            ['body', 'required'],
            ['email', 'required'],
            ['email', 'email'],
            ['verifyCode', 'captcha'],
        ];
    }

    /**
     * @return array
     */
    public function attributeLabels()
    {
        return [
            'verifyCode' => 'Verification Code',
        ];
    }
}
Есть юнит тест к этой форме:

Код: Выделить всё

<?php

namespace frontend\tests\unit\forms;

use frontend\forms\ContactForm;

class ContactFormTest extends \Codeception\Test\Unit
{
    public function testCorrectForm()
    {
        $form = new ContactForm();
        $form->name = 'Tester';
        $form->email = 'tester@example.com';
        $form->body = 'body of current message';
        expect_that($form->validate());
    }
}
При запуске ругается на:
Failed asserting that a boolean is not empty.
Форма не проходит валидацию. Если в правилах капчи указать 'skipOnEmpty' => true, то тест проходит успешно. Но как-то мне этот способ не очень нравится.

Аватара пользователя
maleks
Сообщения: 1859
Зарегистрирован: 2012.12.26, 12:56

Re: Тестирование формы с капчей

Сообщение maleks »

В самом тесте можно на лету у формы подменять такие вещи через $validators = $model->getValidators(); , в т.ч. убрать вообще этот валидатор
Yii2 universal module sceleton - for basic and advanced templates

andrew.pol
Сообщения: 50
Зарегистрирован: 2015.12.25, 17:39

Re: Тестирование формы с капчей

Сообщение andrew.pol »

Решил вопрос проще.

Переписал тест вот так

Код: Выделить всё

<?php

namespace frontend\tests\unit\forms;

use frontend\forms\ContactForm;

class ContactFormTest extends \Codeception\Test\Unit
{
    public function testCorrect()
    {
        $form = new ContactForm();
        $form->name = 'Tester';
        $form->email = 'tester@example.com';
        $form->body = 'body of current message';
        expect_that($form->validate(['name', 'email', 'body']));
    }
}


Ответить