spatie / pest-expectations
一组便捷的 Pest 自定义扩展
Requires
- php: ^8.2
- illuminate/database: ^10.7|^11.0
Requires (Dev)
- illuminate/contracts: ^10.0|^11.0
- laravel/pint: ^1.2
- orchestra/testbench: ^8.3|^9.0
- pestphp/pest: ^2.0
- spatie/laravel-json-api-paginate: ^1.14
- spatie/ray: ^1.28
README
本仓库包含用于 Pest 测试套件的定制期望。
它还包含各种辅助工具,使使用 Pest 进行测试更加容易。想象一下,你只想在 GitHub Actions 上运行测试。你可以使用 whenGitHubActions
辅助工具来实现。
it('can only run well on github actions', function () { // your test })->whenGitHubActions();
支持我们
我们投入了大量资源来创建 最佳的开放源代码包。你可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢你从你的家乡寄来明信片,说明你使用了我们哪些包。你可以在 我们的联系页面 找到我们的地址。我们将发布收到的所有明信片在 我们的虚拟明信片墙 上。
安装
您可以通过 composer 安装此包
composer require spatie/pest-expectations
使用
期望
toPassWith
此期望可用于测试是否 可调用的验证规则 正确工作。
在此示例中,$value
将传递给 YourValidationRule
。如果您的规则对给定值通过,则期望将通过。
expect(new YourValidationRule())->toPassWith($value);
您可以使用 Pest 的 not()
来期望您的验证对给定值未通过。
expect(new YourValidationRule()->not()->toPassWith($value);
toFailWith
此期望可用于测试是否 可调用的验证规则 对给定值未通过。
在此示例中,$value
将传递给 YourValidationRule
。如果您的规则对给定值未通过,则期望将通过。
expect(new YourValidationRule())->toFailWith($value);
可选地,您还可以传递一个消息作为第二个参数。如果验证规则返回给定的 $message
,则期望将通过。
expect(new YourValidationRule())->toFailWith($value, 'This value is not valid.');
toBeModel
期望一个值是一个模型,并且等于传递的模型。
expect($model)->toBeModel($anotherModel);
期望仅当两个模型是相同类的 Eloquent 模型,并且具有相同的键时才通过。
toBeArrayOf
期望一个值是特定值的数组。
expect(User::all())->toBeArrayOf(User::class);
指定的值可以是类名、类实例,或者是以下字符串值之一
'string'
'int'
'float'
'bool'
'scalar'
'array'
'object'
'null'
expect([1, 2])->toBeArrayOf('int'); expect([true, false])->toBeArrayOf('bool'); expect(['foo', 1, false])->toBeArrayOf('scalar');
toBeScheduled
期望一个值是计划任务、命令或可调用的类。如果传递了 timezone
参数,它还将检查是否定义了指定的时区。
expect(MyJob::class)->toBeScheduled('0 * * * *', timezone: 'Europe/Paris');
可选地,您可以传递一个回调函数,该函数接受一个 Illuminate\Console\Scheduling\Event
或 Illuminate\Console\Scheduling\CallbackEvent
实例,因此您可以在其中运行任何所需的断言。
expect(MyArtisanCommand::class)->toBeScheduled(function (Event $event) { expect($event->getExpression())->toBe('0 0 * * *'); expect($event->getSummaryForDisplay())->toBe('Foo'); });
toHaveJsonApiPagination
预期响应包含JSON:API分页。请查看我们的包spatie/laravel-json-api-paginate,了解如何将JSON:API分页添加到您的Laravel应用中。
$response = $this->get('/'); expect($response)->toHaveJsonApiPagination();
辅助工具
此包提供了一些辅助工具,您可以将它们添加到任何测试中。以下是一个whenGitHubActions
辅助工具的示例。当它被添加到测试中时,除非您正在GitHub Actions上运行,否则测试将被跳过。
it('can only run well on github actions', function () { // your test })->whenGitHubActions();
要使用这些辅助工具,您应该在您的Pest.php
文件中调用registerSpatiePestHelpers()
。
这些辅助工具由本包提供
whenConfig($configKey)
:只有当指定的Laravel配置键设置时才运行测试whenEnvVar($envVarName)
:只有当指定的环境变量设置时才运行测试whenWindows
:除非在Windows上运行,否则测试将被跳过whenMac
:除非在macOS上运行,否则测试将被跳过whenLinux
:除非在Linux上运行,否则测试将被跳过whenGitHubActions()
:除非在GitHub Actions上运行,否则测试将被跳过skipOnGitHubActions()
:当在GitHub Actions上运行时,测试将被跳过whenPhpVersion($version)
:除非在指定的PHP版本或更高版本上运行,否则测试将被跳过。您可以传递版本,如8
或8.1
。
断言
此包还提供了一组自定义断言,您可以在测试中使用。
在您的TestCase
类中,您可以使用CustomAssertions
特质,并在setUp
方法中调用registerCustomAssertions
方法。
class TestCase extends \Illuminate\Foundation\Testing\TestCase { use CustomAssertions; protected function setUp(): void { parent::setUp(); $this->registerCustomAssertions(); }
assertHasJsonApiPagination
断言响应包含JSON:API分页。请查看我们的包spatie/laravel-json-api-paginate,了解如何将JSON:API分页添加到您的Laravel应用中。
$this ->get('/') ->assertHasJsonApiPagination();
测试
composer test
变更日志
请参阅变更日志,了解更多最近的变化信息。
贡献
请参阅贡献指南获取详细信息。
安全漏洞
请查看我们的安全策略,了解如何报告安全漏洞。
致谢
许可协议
MIT许可协议(MIT)。请参阅许可文件获取更多信息。