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