ensi / laravel-openapi-testing
laravel openapi testing
0.4.0
2024-06-26 11:38 UTC
Requires
- php: ^8.1
- ensi/openapi-httpfoundation-testing: ^0.0.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.2
- orchestra/testbench: ^7.0 || ^8.0 || ^9.0
- pestphp/pest: ^1.22 || ^2.0
- pestphp/pest-plugin-laravel: ^1.1 || ^2.0
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.11
- spaze/phpstan-disallowed-calls: ^2.15
README
此包基于 ensi/openapi-httpfoundation-testing
,并提供 ValidatesAgainstOpenApiSpec
特性
安装
您可以通过 composer 安装此包
composer require ensi/laravel-openapi-testing --dev
版本兼容性
基本用法
让我们为我们的测试添加基于 oas3 的验证。我们所需的一切是使用 use ValidatesAgainstOpenApiSpec;
并实现如下 getOpenApiDocumentPath(): string
方法
class SomeTestCase extends AnotherTestCase { use ValidatesAgainstOpenApiSpec; protected function getOpenApiDocumentPath(): string { return public_path('api-docs/v1/index.yaml'); } }
特性覆盖了 $this->call
方法以添加所需的验证。因此,所有与 http 相关的辅助方法($this->get()
、$this->postJson()
等)也会执行验证。请求和响应都会被验证以匹配给定的规范的一部分。如果验证失败,您的测试将自动标记为失败,无需任何手动断言。
关闭验证
在某些情况下,您可能希望关闭特定请求的验证。以下是一个示例如何操作
// Turn off validation for both request $this->skipNextOpenApiRequestValidation()->getJson(...); // Turn off validation for both response $this->skipNextOpenApiResponseValidation()->getJson(...); // Turn off validation for both request and response $this->skipNextOpenApiValidation()->getJson(...);
映射路径
为了验证请求是否与 oas3 匹配,此包需要将其映射到规范文档中描述的路径之一。我们使用 Laravel 的路由($request->route()->uri
)来完成此操作。如果它不完全匹配,您可以通过以下方式显式设置当前请求的 OpenApi 路径
$this->forceOpenApiPath('/pets/{petId}')->getJson(...);
贡献
有关详细信息,请参阅 CONTRIBUTING
测试
- composer install
- composer test
安全漏洞
请参阅 我们的安全策略 了解如何报告安全漏洞。
许可协议
MIT 许可协议(MIT)。有关更多信息,请参阅 许可文件