spatie / pest-plugin-route-testing
确保您的Laravel应用中所有路由都正常
Requires
- php: ^8.1
- nunomaduro/termwind: ^1.15.1|^2.0
- pestphp/pest: ^2.34.9
- pestphp/pest-plugin: ^2.1.1
- spatie/laravel-package-tools: ^1.16.4
Requires (Dev)
- laravel/pint: ^1.16.2
- orchestra/testbench: ^8.24
- pestphp/pest-dev-tools: ^2.16
README
在典型的Laravel应用中,有许多用户可以访问的页面。很容易忘记测试它们。这个包使测试应用中所有GET路由变得简单。
这里有一个快速示例
use function Spatie\RouteTesting\routeTesting; routeTesting('all GET routes') ->assertSuccessful();
这将测试应用中所有GET路由并确保它们返回200 HTTP状态码。这里是在一个小型应用中运行此测试时的输出。
除了assertSuccessful()
,您还可以使用Laravel的TestResponse
类中可用的任何断言,例如assertRedirect()
、assertNotFound()
、assertForbidden()
等。
您还可以测试特定路由
use function Spatie\RouteTesting\routeTesting; routeTesting('all blog routes') ->include('blog*') ->assertSuccessful();
如果存在具有路由模型绑定的路由,则该包将跳过这些路由的测试。假设您有一个定义为user/{user}
的路由。这里是在运行测试时的输出。
如果您想测试具有路由模型绑定的路由,您可以使用bind
方法提供模型。
use function Spatie\RouteTesting\routeTesting; use App\Models\User; routeTesting('all blog routes') ->bind('user', User::factory()->create()) ->assertSuccessful();
现在运行测试时,该包将使用提供的模型来测试路由。
支持我们
我们在创建一流的开放式源代码包上投入了大量资源。您可以通过购买我们的付费产品之一来支持我们。
我们非常感谢您从家乡寄给我们明信片,说明您正在使用我们的哪个包。您可以在我们的联系页面上找到我们的地址。我们将在我们的虚拟明信片墙上发布所有收到的明信片。
安装
您可以通过composer安装此包
composer require spatie/pest-plugin-route-testing
用法
您可以使用routeTesting
函数测试应用中的所有路由。
use function Spatie\RouteTesting\routeTesting; routeTesting('all routes') ->assertSuccessful();
这将测试应用中所有GET路由并确保它们返回200 HTTP状态码。这里是在一个小型应用中运行此测试时的输出。
除了assertSuccessful()
,您还可以使用Laravel的TestResponse
类中可用的任何断言,例如assertRedirect()
、assertNotFound()
、assertForbidden()
等。
以下是一个测试重定向是否正常工作的示例。
use function Spatie\RouteTesting\routeTesting; routeTesting('redirect') ->include('old-section/*') ->assertRedirect('new-section/*');
测试特定路由
您可以通过使用include
方法测试特定路由。支持通配符。以下是一个测试所有以blog
开头的路由的示例。
use function Spatie\RouteTesting\routeTesting; routeTesting('all blog routes') ->include('blog*') ->assertSuccessful();
您也可以向include
方法传递任意多的参数。
use function Spatie\RouteTesting\routeTesting; routeTesting('all blog routes') ->include('blog*', 'post*') ->assertSuccessful();
排除路由
如果您想从测试中排除路由,您可以使用exclude
方法。以下是一个测试所有不以admin
开头的路由的示例。
use function Spatie\RouteTesting\routeTesting; routeTesting('all blog routes') ->exclude('admin*') ->assertSuccessful();
绑定路由模型绑定
如果存在具有路由模型绑定的路由,则该包将跳过这些路由的测试。假设您有一个定义为user/{user}
的路由。这里是在运行测试时的输出。
如果您想测试具有路由模型绑定的路由,您可以使用bind
方法提供模型。
use function Spatie\RouteTesting\routeTesting; use App\Models\User; routeTesting('all blog routes') ->bind('user', User::factory()->create()) ->assertSuccessful();
现在运行测试时,该包将使用提供的模型来测试路由。
如果您不想显示因缺少模型绑定而跳过的测试,您可以调用ignoreRoutesWithMissingBindings()
。
use function Spatie\RouteTesting\routeTesting; routeTesting('all blog routes') ->ignoreRoutesWithMissingBindings() ->assertSuccessful();
在测试之前执行自定义代码
您可以使用setUp
方法在路由测试运行之前执行代码。以下是在运行测试之前登录用户的示例。
use function Spatie\RouteTesting\routeTesting; routeTesting('all admin routes') ->setUp(function () { $user = User::factory()->create(); $this->actingAs($user); // optionally, you could also bind the model $this->bind('user', $user); }) ->include('admin*') ->assertSuccessful();
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献。
安全漏洞
请查阅我们的安全策略,了解如何报告安全漏洞:安全策略。
致谢
许可证
MIT 许可证(MIT)。更多信息请参阅许可证文件。