2011-11-24 9 views
5

Estoy probando un modelo en CakePHP 2 y he burlado de un modelo como este:La creación de un modelo de PHPUnit burlado utiliza la base de datos por defecto en lugar de la prueba en CakePHP

$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)); 

Desde cualquier operación con la base de datos plantea el siguiente error:

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

redefiní la información del modelo:

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

Ahora funciona la prueba bien, pero está utilizando la base de datos $default en database.php en lugar de $test. ¿Qué puede estar pasando?

¿Por qué la configuración de la base de datos para las pruebas cambia cuando se utilizan objetos simulados? ¿Podría estar relacionado con los permisos de la base de datos que hacen que el objeto burlado no pueda crear sus tablas personalizadas?

Gracias!

Respuesta

2

finalmente resuelto el problema haciendo pasar los parámetros correctos para el modelo constructor en getMock() tercer agument:

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

La aplicación de lo que se dice en Stubs section de Documentación de PHPUnit, este tercer argumento indica que deseo usar la tabla users y el origen de datos test.

Tengo que mantener la redefinición de la propiedad alias sin embargo:

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

debido a un simple $this->User->read(null, 1) genera un error diciendo que 'User.a_column' no se puede conocer.

Gracias a José Lorenzo.

0

No he encontrado este problema específico anteriormente, pero tengo curiosidad si ha intentado establecer la conexión específica que desea. Así que de la misma manera que establece alias y useTable:

$this->User->useDbConfig = 'test'; 
Cuestiones relacionadas