Поскольку приличное количество кода расположено в классах помощников, то важно проводить тестирование этих классов.
Тестирование помощников немного похоже на тестирование компонентов. Предположим у нас есть хелпер CurrencyRendererHelper, расположенный в app/views/helpers/currency_renderer.php, и тест для этого хелпера, расположенный в app/tests/cases/helpers/currency_renderer.test.php.
Прежде всего мы определим обязанности нашего хелпера CurrencyRendererHelper. У него будут два метода, просто для демонстрационных целей:
Эта функция будет получать сумму для отображения. Она будет принимать число, дополнять нулями (в случае необходимости) до двух знаков после запятой, и добавлять префикс 'USD'.
Эта функция будет делать тоже, что и 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.
Поскольку мы знаем, что должен делать наш метод, то можем написать его:
<?phpclass CurrencyRendererHelper extends AppHelper { public function
usd($amount) { return
'USD ' . number_format($amount, 2, '.', ','); }
}
?>
Здесь мы устанавливаем число десятичных знаков в 2, разделитель десятичных знаков – точка '.', разделитель тысяч – запятая ',', и префикс – строка 'USD'.
Сохраним это в app/views/helpers/currency_renderer.php и запустим тестирование. Вы должны увидеть зеленый прямоугольник и сообщения об успешном прохождении 4 тестов.
<< Тестирование контроллеров | Тестирование компонентов >>