romegasoftware/nova-test-suite

库,帮助更快地进行 Laravel Nova 资源测试

安装: 3,625

依赖: 0

建议者: 0

安全: 0

星标: 4

关注者: 2

分支: 0

开放问题: 0

类型:package

2.1.4 2022-02-24 17:49 UTC

This package is auto-updated.

Last update: 2024-09-25 00:11:45 UTC


README

Software License Travis Total Downloads

安装

composer require romegasoftware/nova-test-suite --dev

用法

生成资源测试用例

要开始,运行 php artisan nova:test resource_name。这将为资源生成测试用例,如果尚未发布,则发布 NovaResourceTestCase

创建资源测试后的第一件事是填充 remapResource() 方法。此方法必须将 Nova 字段名称映射到资源属性。不需要映射资源的每个属性,只需映射更改的或需要不同的属性即可。

protected function remapResource($resource): array
{
    return [
        'location' => $resource->location_id,
        'theme' => $resource->theme_id,
    ];
}

$resource 参数是通过 factory() 生成的新模型实例,因此应包含您需要的任何必要值。如果调用带有任何数据的 Nova 请求方法(如 $this->storeResource(['name' => 'test'])),则 $data 参数将填充。

请求

获取资源

// retrieve all available resources = viewing the index page
$this->getResources();

// retrieve a single resource = viewing a single resource in detail view
$resource = Resource::factory()->create();
$this->getResources($resource);

存储资源

// resource data is generated behind the scenes with factory()->make()
$this->storeResource();

// also accepts model classes or arrays
$resource = Resource::factory()->make();
$this->storeResource($resource);
$this->storeResource(['name' => 'Vader']);

如果资源存储成功,则响应的返回状态码为 201

更新资源

// resource data is generated behind the scenes with factory()->create()
$this->updateResource(['name' => 'Vader']);

// accepts model classes
$resource = Resource::factory()->create();
$resource->name = 'Vader';
$this->updateResource($resource);

删除资源

// resource data is generated behind the scenes with factory()->create()
$this->deleteResource();

// also accepts model classes, arrays or integers (ids)
$resource = Resource::factory()->create();
$this->deleteResource($resource);
$this->deleteResource(['id' => 12]);
$this->deleteResource(12);

关系

$this->assertHasManyRelationships([
    'product',
]);
$this->assertBelongsToRelationships([
    'user',
]);

assertHasOneRelationships(array) assertHasManyRelationships(array) assertBelongsToRelationships(array) assertBelongsToManyRelationships(array) assertMorphToRelationships(array) assertMorphOneRelationships(array) assertMorphManyRelationships(array)

操作

使用 assertHasActions()

透镜

使用 assertHasLenses()

过滤器

使用 assertHasFilters()

断言请求失败

由于失败的 nova 请求返回带有状态码 301 的重定向,我们引入了新的方法 assertNovaFailed(),它检查这一点,而无需考虑失败的 nova 响应返回的状态码。

$this->storeResource()
  ->assertNovaFailed();

测试必填字段

要测试您的 Nova 资源是否设置正确,并检查是否所有必填字段都按预期设置,您可以使用 setNullValuesOn([..]) 方法,该方法将您输入的每个键的下一个请求的值都设置为 null

$this->setNullValuesOn(['customer', 'number_of_participants'])
  ->storeResource()
  ->assertRequiredFields(['customer', 'number_of_participants']);

使用默认用户

默认情况下,每个 nova 请求方法都会检查请求是否通过 actingAs($user, 'api') 已通过身份验证。如果没有提供用户进行身份验证,我们将使用 getDefaultUser() 方法来身份验证您的请求。如果您想明确使用请求的默认用户,可以使用 $this->beDefaultUser(),这将返回当前类,因此它也可以用于链式操作,例如 $this->beDefaultUser()->storeResource()

如果您想为每个请求使用自己的用户,可以重写 getDefaultUser() 方法。

protected function getDefaultUser()
{
    return $this->yourOwnUser;
}

调试失败的请求

为了更容易地调试为什么您的 nova 请求失败,您可以在进行任何断言之前链式调用 assertSessionDoesntHaveErrors()。此方法将转储所有会话错误和请求的 JSON 响应。

$this->storeResource()
  ->assertSessionDoesntHaveErrors();

如果您仍然无法找出为什么您收到了响应的状态码,请尝试使用 withoutNovaExceptionHandling() 来找出响应背后的原因。此方法调用将创建一个回调,该回调在 Nova 中间件运行时立即调用 withoutExceptionHandling()。您也可以链式调用这些调用。

$this->withoutNovaExceptionHandling()
  ->storeResource();

测试

使用以下命令运行测试

vendor/bin/phpunit

更改日志

请参阅变更日志以获取更多关于最近变更的信息。

贡献

请参阅贡献指南以获取详细信息。

致谢

安全

如果您发现任何安全相关的问题,请通过电子邮件bkeith@romegasoftware.com联系,而不是使用问题跟踪器。

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。