如何模拟Laravel的雄辩访问者属性

Sve*_*len 5 php mockery laravel-4

我正在我的Laravel 4应用程序中实现单元测试,但我仍然坚持模拟访问器属性.

我有一个Eloquent具有Accessor属性的模型.我正在尝试模拟此模型,并在调用此访问器属性时返回一个值.但我无法找到任何解决方案来使其工作.

我超级简单的用户类.

class User extends Eloquent {
    public function getFullNameAttribute() {
        return $this->first_name . ' ' . $this->last_name;
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

$user_mock = m::mock('MyApp\Models\User');

$user_mock->shouldReceive('__get')->with('full_name')->andReturn('John Snow'); // doesn't work
$user_mock->shouldReceive('getAttribute')->with('full_name')->andReturn('John Snow'); // doesn't work
$user_mock->shouldReceive('getFullNameAttribute')->andReturn('John Snow'); // doesn't work

echo $user_mock->full_name; // --> " "
Run Code Online (Sandbox Code Playgroud)

我只是得到一个空的空间,表明仍在调用原始函数.

小智 -3

查看Mockery的文档,看起来它不支持mocking magic方法。您基本上只需要使用简单的赋值来设置属性:

$user_mock = m::mock('MyApp\Models\User');
$user_mock->first_name = 'John Snow';
Run Code Online (Sandbox Code Playgroud)

嘲笑文档