
Когда тестируете код, который зависит от моделей и данных, можно использовать прикрепления, как способ генерировать временные таблицы, заполненные данными для тестирования. Преимущество использования прикреплений – это то, что ваш тест не сможет разрушить реальные данные. Также, вы можете начать тестировать ваш код непосредственно до разработки реального содержимого для приложения.
CakePHP попытается использовать соединение с именем $test в конфигурационном файле app/config/database.php. Если это соединение не получится использовать, то будет использоваться $default конфигурация и в этой базе данных будут создаваться тестовые таблицы. В обоих случаях, к имени таблиц будет добавляться префикс test_suite_", для предотвращения конфликтов с, возможно, уже существующими таблицами.
CakePHP выполняет следующие действия во время теста, основанного на прикреплениях:
При создании прикрепления, в основном, вам надо определить две вещи: структуру таблицы (какие поля будут входить в неё), и какие записи будут изначально записаны в эту тестовую таблицу. Давайте создадим наше первое прикрипление, которое будет использоваться для тестирования нашей модели Article. В каталоге app/tests/fixtures создадим файл article_fixture.php со следующим содержимым:
<?php  
 class ArticleFixture extends CakeTestFixture { 
      var $name = 'Article'; 
       
      var $fields = array( 
          'id' => array('type' => 'integer', 'key' => 'primary'), 
          'title' => array('type' => 'string', 'length' => 255, 'null' => false), 
          'body' => 'text', 
          'published' => array('type' => 'integer', 'default' => '0', 'null' => false), 
          'created' => 'datetime', 
          'updated' => 'datetime' 
      ); 
      var $records = array( 
          array ('id' => 1, 'title' => 'Первая статья', 'body' => 'Содержимое первой статьи', 'published' => '1', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'), 
          array ('id' => 2, 'title' => 'Вторая статья', 'body' => 'Содержимое второй статьи', 'published' => '1', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'), 
          array ('id' => 3, 'title' => 'Третья статья', 'body' => 'Содержимое третьей статьи', 'published' => '1', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31') 
      ); 
 } 
 ?>
Мы используем $fields для определения того, какие поля будет содержать таблица. Формат, используемый для определения этих полей, такой же, который используется в функции generateColumnSchema(), определенной в классах движка баз данных CakePHP (например, в файле dbo_mysql.php.) Давайте посмотрим какие атрибуты может иметь поле и их значение:
type
key
length
null
default
И наконец-то, мы можем определить множество записей, которые будут записаны в тестовую таблицу сразу же после её создания. Формат довольно простой и требует минимум дальнейших разъяснений. Просто помните, что каждая запись в массиве $records должна иметь ключ для каждого поля, определенного в массиве $fields. Если поля для какой-то записи должно иметь значение NULL, то просто определите значение этого поля как NULL.