El método CakePHP "con" en el objeto simulado no funciona
cakephp testing (2)
Estoy intentando probar mi aplicación usando CakePHP 2.2 RC1, en la cierta acción de mi controlador necesito una información del objeto Auth, en mi prueba he creado un objeto simulado para el componente Auth, pero cuando llamo al método con mi simulacro objeto convertido en inválido, cuando no pongo todo esto funciona bien.
Debajo del objeto simulado que no funciona
$this->controller->Auth
->staticExpects($this->any())
->method(''user'')
->with(''count_id'')
->will($this->returnValue(9));
Gracias por su atención chicos.
-
Editar
Sobre el código completo de mi caso de prueba, esta es una prueba muy simple.
class TagsControllerTest extends ControllerTestCase {
public function testView(){
$Tags = $this->generate(''Tags'', array(
''components'' => array(
''Session'',
''Auth'' => array(''user'')
)
));
$Tags->Auth->staticExpects($this->any())
->method(''user'')
->with(''count_id'')
->will($this->returnValue(2));
$result = $this->testAction(''/tags/view'');
$this->assertEquals($result, 2);
}
}
Y el código de mi acción en el controlador Tag, esto no tiene nada más (para fines de prueba) un retorno de objeto de usuario con count_id como parámetro.
public function view(){
return $this->Auth->user(''count_id'');
}
Ejecutando la prueba recibí este mensaje:
Expectativa fallida para el nombre del método es igual a cuando se invoca cero o más veces El parámetro 0 para la invocación AuthComponent :: user (null) no coincide con el valor esperado. Error al afirmar que null coincide con ''count_id'' esperado.
Después de mirar el código de AuthComponent
, creo que el problema radica en el hecho de que no se está burlando de todo el componente o no se está burlando del método _getUser()
. No lo olvide: ¡ los métodos de los que no se burla son métodos reales !
Si miras el código, verás que _getUser()
llama al _getUser()
que a su vez es llamado por startup()
.
Hay dos formas de resolver este problema, la primera es burlarse de todo el AuthComponent
:
$Tags = $this->generate(''Tags'', array(
''components'' => array(
''Session'',
''Auth'' /* no methods */
)
));
o simulacro _getUser()
además de user()
:
$Tags = $this->generate(''Tags'', array(
''components'' => array(
''Session'',
''Auth'' => array(''user'', ''_getUser'')
)
));
Con suerte, esto debería resolver su problema.
Estaba enfrentando el mismo problema que no pude resolver con la solución provista.
La solución es usar staticExpects () en lugar de expected () ya que el usuario es una función estática.
$batches->Auth->staticExpects($this->once())->method(''user'')
->with(''id'')
->will($this->returnValue(1));