Pregunta

decir que tengo dos modelos que se extienden desde Eloquent y que se relacionan entre sí.Puedo burlarme de la relación?

es decir:

class Track extends Eloquent {
    public function courses()
    {
        return $this->hasMany('Course');
    }
}

class Course extends Eloquent {
    public function track()
    {
        return $this->belongsTo('Track');
    }
}

en MyTest, quiero crear un simulacro de curso, y devolver una instancia de la pista, llamando a la pista de la propiedad, no la pista instancia (No quiero que el generador de consultas)

use \Mockery as m;

class MyTest extends TestCase {
    public function setUp()
    {
        $track = new Track(array('title' => 'foo'));
        $course = m::mock('Course[track]', array('track' => $track));

        $track = $course->track  // <-- This should return my track object
    }
}
¿Fue útil?

Solución

Ya que la pista es una propiedad y no un método, a la hora de crear el simulacro tendrá que reemplazar el setAttribute y getAttribute los métodos de la modelo.A continuación es una solución que te permitirá establecer una expectativa de la propiedad que usted está buscando:

$track = new Track(array('title' => 'foo'));
$course = m::mock('Course[setAttribute,getAttribute]');
// You don't really care what's returned from setAttribute
$course->shouldReceive('setAttribute');
// But tell getAttribute to return $track whenever 'track' is passed in
$course->shouldReceive('getAttribute')->with('track')->andReturn($track);

No es necesario especificar el track método cuando se burlaba de la Course objeto, a menos que también son ganas de probar el código que se basa en el generador de consultas.Si este es el caso, entonces usted puede burlarse de la track método como este:

// This is just a bare mock object that will return your track back
// whenever you ask for anything. Replace 'get' with whatever method 
// your code uses to access the relationship (e.g. 'first')
$relationship = m::mock();
$relationship->shouldReceive('get')->andReturn([ $track ]);

$course = m::mock('Course[track]');
$course->shouldReceive('track')->andReturn($relationship);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top