2011-11-24 4 views
5

sto testando un modello in CakePHP 2 e ho preso in giro un modello come questo:La creazione di un modello di PHPUnit deriso utilizza database predefinito al posto di prova in 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)); 

Dal momento che qualsiasi operazione con il database genera il seguente errore:

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

ho ridefinito il modello di informazioni:

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

Ora le opere di test bene, ma sta utilizzando il database $default in database.php anziché $test. Cosa può succedere?

Perché la configurazione del database per verificare le modifiche quando si utilizzano oggetti mocked? Potrebbe essere correlato alle autorizzazioni del database che fa sì che l'oggetto deriso non sia in grado di creare le sue tabelle personalizzate?

Grazie!

risposta

2

ho finalmente risolto il problema passando i parametri corretti al costruttore modello getMock() terzo agument:

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

L'applicazione di ciò che viene detto in Stubs section di Documentazione PHPUnit, questo terzo argomento indica che voglio utilizzare la tabella users e l'origine dati test.

devo mantenere la ridefinizione della proprietà alias però:

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

perché una semplice $this->User->read(null, 1) genera un errore dicendo che 'User.a_column' non è stato trovato.

Grazie a José Lorenzo.

0

Non ho riscontrato questo specifico problema prima, ma sono curioso di sapere se hai provato ad impostare la connessione specifica che desideri. Così allo stesso modo è possibile impostare alias e useTable:

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