laravel 4嘲讽模拟模型关系

安全

说我有两个扩展的模型,Eloquent它们彼此关联。我可以嘲笑这种关系吗?

即:

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

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

在MyTest中,我当然想创建一个模拟,并通过调用track属性而不是track实例返回track的实例我不希望使用查询构建器

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
    }
}
杰夫·兰伯特

由于track是属性而不是方法,因此在创建模拟时,您将需要覆盖模型setAttributegetAttribute方法。以下是一个解决方案,可让您对要查找的属性设置期望:

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

track嘲笑Course对象时,无需指定方法,除非您还想测试依赖于查询生成器的代码。如果是这种情况,则可以模拟如下track方法:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章