CakePHP: Manual/CommonTasks/Testing/TestingHelpers

Тестирование помощников

Поскольку приличное количество кода расположено в классах помощников, то важно проводить тестирование этих классов.

Тестирование помощников немного похоже на тестирование компонентов. Предположим у нас есть хелпер CurrencyRendererHelper, расположенный в app/views/helpers/currency_renderer.php, и тест для этого хелпера, расположенный в app/tests/cases/helpers/currency_renderer.test.php.


Создание теста для помощника, часть I

Прежде всего мы определим обязанности нашего хелпера CurrencyRendererHelper. У него будут два метода, просто для демонстрационных целей:

function usd($amount)

Эта функция будет получать сумму для отображения. Она будет принимать число, дополнять нулями (в случае необходимости) до двух знаков после запятой, и добавлять префикс 'USD'.

function euro($amount)

Эта функция будет делать тоже, что и usd(), но префикс будет 'EUR'. И просто, чтобы сделать эту функцию немного сложнее, мы заключим результат в теги span:

<? <span class="euro"></span?>

Давайте создадим тесты:

<?php

//Импортирование хелпера для его тестирования

//Если тестируемый хелпер использует какой-то другой хелпер, например Html, 

//то он должен быть также импортирован в этой строке, и инициализирован в startTest().

App::import('Helper''CurrencyRenderer');

class CurrencyRendererTest extends CakeTestCase {

    private $currencyRenderer null;

    //Здесь мы инициализируем наш хелпер, и все другие необходимые хелперы.

    public function startTest() {

        $this->currencyRenderer = new CurrencyRendererHelper();

    }

    //testing usd() function.

    public function testUsd() {

        $this->assertEqual('USD 5.30'$this->currencyRenderer->usd(5.30));

        //Мы должны всегда получать число с двумя знаками после запятой.

        $this->assertEqual('USD 1.00'$this->currencyRenderer->usd(1));

        $this->assertEqual('USD 2.05'$this->currencyRenderer->usd(2.05));

        //Проверка разделителя тысяч

        $this->assertEqual('USD 12,000.70'$this->currencyRenderer->usd(12000.70));

    }

Здесь мы вызываем метод usd() с различными параметрами и говорим нашей тестовой оболочке проверять соответствие возвращаемого и ожидаемого результата.

Если запустить этот тест сейчас, то он выдаст ошибки (потому что хелпер CurrencyRendererHelper еще не существует) showing that we have 3 fails.

Поскольку мы знаем, что должен делать наш метод, то можем написать его:

<?php

class CurrencyRendererHelper extends AppHelper {

    public function usd($amount) {

        return 'USD ' number_format($amount2'.'',');

    }

}

?>

Здесь мы устанавливаем число десятичных знаков в 2, разделитель десятичных знаков – точка '.', разделитель тысяч – запятая ',', и префикс – строка 'USD'.

Сохраним это в app/views/helpers/currency_renderer.php и запустим тестирование. Вы должны увидеть зеленый прямоугольник и сообщения об успешном прохождении 4 тестов.

<< Тестирование контроллеров | Тестирование компонентов >>