Unit testing Laravel模拟模型/QueryBuilder
我已经玩了一段时间的单元测试,但我已经达到了一个地步,我不知道如何才能实现我想要的 我有一个涉及JsonResource的测试,在这个JsonResource中我有这个示例Unit testing Laravel模拟模型/QueryBuilder,unit-testing,testing,phpunit,laravel-6,Unit Testing,Testing,Phpunit,Laravel 6,我已经玩了一段时间的单元测试,但我已经达到了一个地步,我不知道如何才能实现我想要的 我有一个涉及JsonResource的测试,在这个JsonResource中我有这个示例 'id' => $this->id, 'name' => $this->name, 'state' => $this->state->name, 'users' => UsersResource::collection($this->users()->limit($
'id' => $this->id,
'name' => $this->name,
'state' => $this->state->name,
'users' => UsersResource::collection($this->users()->limit($userLimit)->get()),
'clients' => ClientsResource::collection($this->clients()->limit($clientLimit)->get()),
我的测试涉及调用这个JsonResource,它与一个组模型相关,该模型包含用户和客户端以及一些其他属性。
为了在调用这个JsonResource之前模拟正在执行的操作,我在封装我的Group类的存储库上使用了一个模拟,说它应该返回Group:class的实例。然后使用这个组实例调用jsonresource,我需要模拟这些属性,但是由于clients()和users()是函数,我需要模拟它们,因为没有数据库访问。下面是mockry::mock(Group::Class)
我想知道我怎样才能使下面的这些行工作。据我所知,它无法识别方法调用的顺序或“连接”顺序。这是可以实现的吗?我怎样才能做到这一点
$this->groupMock->shouldReceive('clients')->andReturn($this->groupMock)
->shouldReceive('limit')->with(6)->andReturn($this->groupMock)
->shouldReceive('get')->andReturn(collect(factory(User::class, 2)->make()));
$this->groupMock->shouldReceive('users')->andReturn($this->groupMock)
->shouldReceive('limit')->with(8)->andReturn($this->groupMock)
->shouldReceive('get')->andReturn(collect(factory(User::class, 6)->make()))
$this->groupMock->shouldReceive('clients')->andReturn($this->groupMock)
->shouldReceive('limit')->with(6)->andReturn($this->groupMock)
->shouldReceive('get')->andReturn(collect(factory(User::class, 2)->make()));
$this->groupMock->shouldReceive('users')->andReturn($this->groupMock)
->shouldReceive('limit')->with(8)->andReturn($this->groupMock)
->shouldReceive('get')->andReturn(collect(factory(User::class, 6)->make()))