spatie/pest-expectations

一组便捷的 Pest 自定义扩展

1.10.0 2024-07-03 10:01 UTC

This package is auto-updated.

Last update: 2024-09-08 14:35:35 UTC


README

Latest Version on Packagist Tests Total Downloads

本仓库包含用于 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\EventIlluminate\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版本或更高版本上运行,否则测试将被跳过。您可以传递版本,如88.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)。请参阅许可文件获取更多信息。