Допустим, у нас уже есть модель Article, определенная в app/models/article.php, которая выглядит так:
<?php
class Article extends AppModel { var
$name = 'Article';
function
published($fields = null) {
$conditions = array(
$this->name . '.published' => 1
);
return
$this->findAll($conditions, $fields); }
}
?>
Сейчас мы хотим подготовить тест, который будет использовать определение этой модели, и с помощью прикреплений протестирует некоторую функциональность в модели. Тестовый пакет CakePHP подгружает минимум файлов. Мы должны начать с загрузки нашей родительской модели (в данном случае – модель Article, которую мы уже определили), и затем информировать тестовый комплекс о том, что мы хотим протестировать эту модель, определив какую конфигурацию базы данных он должен использовать. Тестовый комплекс CakePHP имеет конфигурацию базы данных test_suite, которая используется для всех моделей, указанных в прикриплениях. Установка $useDbConfig в эту конфигурацию позволит знать тестовой программе, что эта модель исползует конфигурацию базы данных тестового комплекса.
Поскольку мы также хотим использовать весь существующий код нашей модели, то мы создадим тестовую модель на основе модели Article, установим $useDbConfig и $name. Давайте сейчас создадим файл article.test.php в каталоге app/tests/cases/models со следующим содержимым:
<?php App
::import('Model','Article');
class
ArticleTestCase extends CakeTestCase { var
$fixtures = array( 'app.article' ); }
?>
Мы создали ArticleTestCase. В переменной $fixtures мы определили прикрепление, которое будем использовать.
Замечание: Если ваша модель ассоциирована с другими моделями, то вы должны включить все прикрепления для каждой ассоциированной модели, даже, если вы не используете их. Например: A hasMany B hasMany C hasMany D. В ATestCase вы должны включить прикрепления для a, b, c и d.
Давайте добавим метод для тестирования функции published() модели Article. Отредактируйте файл app/tests/cases/models/article.test.php следующим образом:
<?php App
::import('Model', 'Article');
class
ArticleTestCase extends CakeTestCase { var
$fixtures = array( 'app.article' );
function
testPublished() {
$this->Article =& ClassRegistry::init('Article');
$result = $this->Article->published(array('id', 'title'));
$expected = array( array(
'Article' => array( 'id' => 1, 'title' => 'First Article' )), array(
'Article' => array( 'id' => 2, 'title' => 'Second Article' )), array(
'Article' => array( 'id' => 3, 'title' => 'Third Article' )) );
$this->assertEqual($result, $expected); }
}
?>
Мы добавили метод testPublished(). Начинается он с создания экземпляра нашего прикрепления, основанного на модели Article, и затем вызывается метод published(). В $expected мы установили ожидаемый результат (это мы знаем, поскольку определили какие записи будут изначально добавлены в таблицу). Соответствие результата и ожидаемого результата мы проверяем с помощью метода assertEqual. Как запустить тест смотрите выше в статье Создание тестов.