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 тестов.

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