如何在Laravel中对我的控制器服务存储库方法进行单元测试



我想测试控制器服务存储库模式中的方法,尤其是索引方法

ChecklistsController.php

<?php
namespace AppHttpControllersApiv1;
use AppExceptionsNotFoundException;
use AppExceptionsNotImplementedException;
use AppHttpRequestsStoreChecklistsRequest;
use AppHttpRequestsUpdateChecklistRequest;
use AppServicesChecklistsServiceInterface;
use IlluminateHttpRequest;
class ChecklistController extends BaseApiV1Controller
{
private $_checklistsService;
public function __construct(ChecklistsServiceInterface $checklistService) {
$this->_checklistsService = $checklistService;
}
/**
* @param Request $request
* @return mixed
*/
public function index(Request $request)
{
$user = $request->user();
return $this->_checklistsService->getUserChecklists($user['userId']);
}
}

ChecklistService.php

<?php
namespace AppServices;
use AppModelsChecklist;
use AppRepositoriesChecklistsRepositoryInterface;
class ChecklistsService implements ChecklistsServiceInterface
{
private $_checklistsRepository;
public function __construct(ChecklistsRepositoryInterface $checklistsRepository)
{
$this->_checklistsRepository = $checklistsRepository;
}
public function getUserChecklists(int $userId)
{
return $this->_checklistsRepository->getUserChecklists($userId);
}
}

ChecklistRepository.php

<?php
namespace AppRepositories;
use AppModelsChecklist;
class ChecklistsRepository implements ChecklistsRepositoryInterface
{
public function getUserChecklists(int $userId)
{
return Checklist::where('userId', $userId)->get();
}
}

因此,我想对Controller中的Index方法和Service and Repository中的getUserChecklists方法进行单元测试。

Laravel提供HTTP测试助手。这将允许您对控制器方法的响应进行断言。

示例:

public function test_index_route {
$user = User::factory()->create();
$response = $this->actingAs($user) // index method requires a user
->get('/');
$response->assertStatus(200);
->assertJsonCount($expectedResultCount);
->assertJson($expectedStructure);
}

由于某些测试需要现有的数据库记录,请使用工厂创建所需的数据库状态。此外,一定要查看HTTP和数据库助手的可用断言的完整列表。

最新更新