<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>CakePHP - Manual/CommonTasks/Testing/TestingHelpers</title>
<link>http://cake-php.ru/wiki/Manual/CommonTasks/Testing/TestingHelpers</link>
<description>History/revisions of CakePHP/Manual/CommonTasks/Testing/TestingHelpers</description>
<language>en-us</language>
<item>
<title>2009-04-28 22:30:43</title>
<link>http://cake-php.ru/wiki/Manual/CommonTasks/Testing/TestingHelpers/show?time=2009-04-28+22%3A30%3A43</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".manual.commontasks.testing.testinghelpers" href="http://cake-php.ru/wiki/Manual/CommonTasks/Testing/TestingHelpers" class="">/Manual&amp;nbsp;/&amp;nbsp;Common&amp;nbsp;Tasks&amp;nbsp;/&amp;nbsp;Testing&amp;nbsp;/&amp;nbsp;Testing&amp;nbsp;Helpers&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/CommonTasks/Testing/TestingHelpers?time=2009-04-28+22%3A30%3A43">2009-04-28 22:30:43&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/CommonTasks/Testing/TestingHelpers">2009-04-30 18:29:44&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Поскольку приличное количество кода расположено в&amp;nbsp;классах помощников, то&amp;nbsp;важно проводить тестирование этих классов.&lt;br />
Тестирование помощников немного похоже на&amp;nbsp;тестирование компонентов. Предположим у&amp;nbsp;нас есть хелпер &lt;!--notypo-->CurrencyRendererHelper&lt;!--/notypo-->, расположенный в&amp;nbsp;app/views/helpers/currency_renderer.php, и&amp;nbsp;тест для&amp;nbsp;этого хелпера, расположенный в&amp;nbsp;app/tests/cases/helpers/currency_renderer.test.php.&lt;br />
&lt;hr noshade="noshade" size="1" />&lt;a name="h903-1">&lt;/a>&lt;h3>Создание теста для&amp;nbsp;помощника, часть I&lt;/h3>
Прежде всего мы&amp;nbsp;определим обязанности нашего хелпера &lt;!--notypo-->CurrencyRendererHelper&lt;!--/notypo-->. У&amp;nbsp;него будут два&amp;nbsp;метода, просто для&amp;nbsp;демонстрационных целей:&lt;br />
&lt;div class="indent"> &lt;strong>function usd($amount)&lt;/strong>&lt;/div>
Эта&amp;nbsp;функция будет получать сумму для&amp;nbsp;отображения. Она&amp;nbsp;будет принимать число, дополнять нулями (в случае необходимости) до&amp;nbsp;двух знаков после запятой, и&amp;nbsp;добавлять префикс 'USD'.&lt;br />
&lt;div class="indent"> &lt;strong>function euro($amount)&lt;/strong>&lt;/div>
Эта&amp;nbsp;функция будет делать тоже, что&amp;nbsp;и&amp;nbsp;usd(), но&amp;nbsp;префикс будет 'EUR'. И&amp;nbsp;просто, чтобы сделать эту&amp;nbsp;функцию немного сложнее, мы&amp;nbsp;заключим результат в&amp;nbsp;теги span: &lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?&amp;nbsp;&lt;/span>&lt;span style="color: #007700">&amp;lt;&lt;/span>&lt;span style="color: #0000BB">span&amp;nbsp;&lt;/span>&lt;span style="color: #007700">class=&lt;/span>&lt;span style="color: #DD0000">"euro"&lt;/span>&lt;span style="color: #007700">&amp;gt;&amp;lt;/&lt;/span>&lt;span style="color: #0000BB">span&lt;/span>&lt;span style="color: #007700">&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Давайте создадим тесты:&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?php&lt;br />&lt;/span>&lt;span style="color: #FF8000">//Импортирование&amp;nbsp;хелпера&amp;nbsp;для&amp;nbsp;его&amp;nbsp;тестирования&lt;br />//Если&amp;nbsp;тестируемый&amp;nbsp;хелпер&amp;nbsp;использует&amp;nbsp;какой-то&amp;nbsp;другой&amp;nbsp;хелпер,&amp;nbsp;например&amp;nbsp;Html,&amp;nbsp;&lt;br />//то&amp;nbsp;он&amp;nbsp;должен&amp;nbsp;быть&amp;nbsp;также&amp;nbsp;импортирован&amp;nbsp;в&amp;nbsp;этой&amp;nbsp;строке,&amp;nbsp;и&amp;nbsp;инициализирован&amp;nbsp;в&amp;nbsp;startTest().&lt;br />&lt;/span>&lt;span style="color: #0000BB">App&lt;/span>&lt;span style="color: #007700">::&lt;/span>&lt;span style="color: #0000BB">import&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'Helper'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'CurrencyRenderer'&lt;/span>&lt;span style="color: #007700">);&lt;br />class&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">CurrencyRendererTest&amp;nbsp;&lt;/span>&lt;span style="color: #007700">extends&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">CakeTestCase&amp;nbsp;&lt;/span>&lt;span style="color: #007700">{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$currencyRenderer&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">null&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//Здесь&amp;nbsp;мы&amp;nbsp;инициализируем&amp;nbsp;наш&amp;nbsp;хелпер,&amp;nbsp;и&amp;nbsp;все&amp;nbsp;другие&amp;nbsp;необходимые&amp;nbsp;хелперы.&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">public&amp;nbsp;function&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">startTest&lt;/span>&lt;span style="color: #007700">()&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">currencyRenderer&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;new&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">CurrencyRendererHelper&lt;/span>&lt;span style="color: #007700">();&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//testing&amp;nbsp;usd()&amp;nbsp;function.&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">public&amp;nbsp;function&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">testUsd&lt;/span>&lt;span style="color: #007700">()&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">assertEqual&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'USD&amp;nbsp;5.30'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">currencyRenderer&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">usd&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">5.30&lt;/span>&lt;span style="color: #007700">));&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//Мы&amp;nbsp;должны&amp;nbsp;всегда&amp;nbsp;получать&amp;nbsp;число&amp;nbsp;с&amp;nbsp;двумя&amp;nbsp;знаками&amp;nbsp;после&amp;nbsp;запятой.&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">assertEqual&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'USD&amp;nbsp;1.00'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">currencyRenderer&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">usd&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">1&lt;/span>&lt;span style="color: #007700">));&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">assertEqual&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'USD&amp;nbsp;2.05'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">currencyRenderer&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">usd&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">2.05&lt;/span>&lt;span style="color: #007700">));&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #FF8000">//Проверка&amp;nbsp;разделителя&amp;nbsp;тысяч&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">assertEqual&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'USD&amp;nbsp;12,000.70'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">currencyRenderer&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">usd&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">12000.70&lt;/span>&lt;span style="color: #007700">));&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Здесь мы&amp;nbsp;вызываем метод usd() с&amp;nbsp;различными параметрами и&amp;nbsp;говорим нашей тестовой оболочке проверять соответствие возвращаемого и&amp;nbsp;ожидаемого результата.&lt;br />
Если запустить этот тест сейчас, то&amp;nbsp;он выдаст ошибки (потому что&amp;nbsp;хелпер &lt;!--notypo-->CurrencyRendererHelper&lt;!--/notypo--> еще&amp;nbsp;не&amp;nbsp;существует) showing that we&amp;nbsp;have 3 fails.&lt;br />
Поскольку мы&amp;nbsp;знаем, что&amp;nbsp;должен делать наш&amp;nbsp;метод, то&amp;nbsp;можем написать его:&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?php&lt;br />&lt;/span>&lt;span style="color: #007700">class&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">CurrencyRendererHelper&amp;nbsp;&lt;/span>&lt;span style="color: #007700">extends&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">AppHelper&amp;nbsp;&lt;/span>&lt;span style="color: #007700">{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">usd&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$amount&lt;/span>&lt;span style="color: #007700">)&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'USD&amp;nbsp;'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">.&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">number_format&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$amount&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">2&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'.'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">','&lt;/span>&lt;span style="color: #007700">);&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br />}&lt;br />&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
Здесь мы&amp;nbsp;устанавливаем число десятичных знаков в&amp;nbsp;2, разделитель десятичных знаков &amp;ndash; точка '.', разделитель тысяч &amp;ndash; запятая ',', и&amp;nbsp;префикс &amp;ndash; строка 'USD'.&lt;br />
Сохраним это&amp;nbsp;в&amp;nbsp;app/views/helpers/currency_renderer.php и&amp;nbsp;запустим тестирование. Вы&amp;nbsp;должны увидеть зеленый прямоугольник и&amp;nbsp;сообщения об&amp;nbsp;успешном прохождении 4 тестов. &lt;br />
&lt;span class="missingpage">&amp;lt;&amp;lt; Тестирование контроллеров&lt;/span>&lt;a href="http://cake-php.ru/wiki/TestingControllers/edit?add=1" title="Создать эту страницу">?&lt;/a> | &lt;span class="missingpage">Тестирование компонентов &amp;gt;&amp;gt;&lt;/span>&lt;a href="http://cake-php.ru/wiki/TestingComponents/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>

