При создании фиктивной модели PHPUnit используется база данных по умолчанию вместо теста в CakePHP - PullRequest
5 голосов
/ 24 ноября 2011

Я тестирую модель в CakePHP 2 и смоделировал модель следующим образом:

$this->User = $this->getMock('User', array(
  '_saveUploadedFile',
  '_removeUploadedFile',
)); 
$this->User->expects($this->any())
        ->method('_saveUploadedFile')
        ->with($data, Configure::read('App.myDirectory'), true);
        ->will($this->returnValue(true));
$this->User->expects($this->any())
        ->method('_removeUploadedFile')
        ->with($data, Configure::read('App.myDirectory'))
        ->will($this->returnValue(true));

Поскольку при любой операции с базой данных возникает следующая ошибка:

"Database table mock__user_b6241a4cs for model User was not found."

Я переопределилинформация о модели:

$this->User->alias = 'User';
$this->User->useTable = 'users';

Теперь тест работает хорошо, но он использует базу данных $default в database.php вместо $test.Что может происходить?

Почему конфигурация базы данных для тестирования изменяется при использовании макетов объектов?Может ли это быть связано с разрешениями базы данных, которые приводят к тому, что смоделированный объект не может создавать свои собственные таблицы?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Я наконец решил проблему, передав правильные параметры конструктору модели в getMock() третьем аргументе:

$this->User = $this->getMock('User',
  array('_saveUploadedFile', '_removeUploadedFile'),
  array(false, 'users', 'test')
);

Применяя то, что сказано в разделе Заглушки документации PHPUnit, этот третий аргумент указывает, что я хочу использовать таблицу users и источник данных test.

Я должен сохранить переопределение свойства alias, хотя:

$this->User->alias = 'User';

потому что простой $this->User->read(null, 1) вызывает ошибку, говорящую, что 'User.a_column' не может быть найден.

Благодаря Хосе Лоренцо .

0 голосов
/ 25 ноября 2011

Я не сталкивался с этой конкретной проблемой раньше, но мне любопытно, пытались ли вы установить конкретное соединение, которое вы хотите. Таким же образом вы устанавливаете alias и useTable:

$this->User->useDbConfig = 'test';
...