【发布时间】:2015-01-07 14:45:18
【问题描述】:
我想模拟模型的作用域方法,可以吗?
这是场景:
订购型号:
public function scopeForUser($query) // query scope method which should be mocked
{
return $query->where('user_id', Auth::id());
}
用户模型:
public function getOrders()
{
$orders = $this->orders(); // Returns Eloquent object(HasMany)
$orders->forUser(); // I would like to mock forUser() method
return $orders->get();
}
测试用例:
public function testGetUsersOrders()
{
$userOrders = Order::where('user_id', 1);
// Mock Order's forUser method
$this->mock = Mockery::mock('Eloquent', 'Order'); // ?? I can't mock HasMany object, can I?
$this->app->instance('Order', $this->mock);
$this->mock->shouldReceive('forUser')->once()->andReturn($userOrders->get());
$result = $this->user->getOrders();
$this->assertEquals($userOrders->get(), $result);
}
这是一个简化的例子。
【问题讨论】:
标签: php unit-testing laravel mocking eloquent