laragear/meta-testing

用于测试 Laravel 扩展包的 Laravel 扩展包助手

v2.0.0 2024-03-13 06:38 UTC

This package is auto-updated.

Last update: 2024-09-13 07:44:58 UTC


README

Latest Version on Packagist Latest stable test run Codecov coverage Maintainability Sonarcloud Status Laravel Octane Compatibility

用于测试 Laravel 扩展包的 Laravel 扩展包。

public function test_has_service_registered(): void
{
    $this->assertHasServices('my-cool-service');
}

成为赞助商

您的支持使我能够保持这个包免费、更新和可维护。或者,您可以 传播信息!

要求

  • PHP 8.1 或更高版本。
  • Laravel 10.x 或更高版本。

安装

使用 Composer 将此包添加到您的项目中

composer require --dev laragear/meta-testing

不要require-dev 之外安装此包,除非您计划在生产环境中使用此包。

测试

测试服务提供者

InteractsWithServiceProvider 允许快速测试您的包的服务提供者是否已将所有必要的代码片段注册到服务容器中。

use Orchestra\Testbench\TestCase
use Laragear\MetaTesting\InteractsWithServiceProvider;

class ServiceProviderTest extends TestCase
{
    use InteractsWithServiceProvider;
    
    public function test_is_registered_as_singleton(): void
    {
        $this->assertHasSingletons(\Vendor\Package\MyService::class);
    }
}

可用的断言在以下表中

服务助手

InteractsWithServices 特性包含从服务容器检索服务并执行快速检查或准备等操作的帮助器。

public function test_something_important(): void
{
    // Get a service from the Service Container, optionally run over a callback.
    $cache = $this->service('cache', fn ($cache) => $cache->set('foo', 'bar', 30));
    
    // Run a service once and forgets it, while running a callback over it.
    $compiler = $this->serviceOnce('blade.compiler', fn($compiler) => $compiler->check('cool'));
    
    // Executes a callback over a REAL service when already mocked.
    $this->unmock('files', function ($files): void {
        $files->copyDirectory('foo', 'bar');
    });
}

验证

此元包包含一个 InteractsWithValidation 特性,该特性可以使用最少的数据断言规则是否通过或失败。这在创建验证规则和测试它们时非常有用,无需太多的样板代码。

public function test_validation_rule(): void
{
    // Assert the validation rule passes.
    $this->assertValidationPasses(['test' => 'foo'],['test' => 'my_rule']);
    
    // Assert the validation rule fails.
    $this->assertValidationFails(['test' => 'bar'],['test' => 'my_rule']);
}

中间件

您可以使用 InteractsWithMiddleware 特性和其 middleware() 方法轻松测试中间件。它在发送测试请求之前为给定路径创建一个按需路由,因此无需注册路由。

use Illuminate\Http\Request;
use Vendor\Package\Http\Middleware\MyMiddleware;
use Laragear\MetaTesting\Http\Middleware\InteractsWithMiddleware;

public function test_middleware(): void
{
    $response = $this->middleware(MyMiddleware::class)->using(function (Request $request) {
        // ...
    })->post('test', ['foo' => 'bar']);
    
    $response->assertOk();
}

它代理了所有 MakesHttpRequest 特性方法,如 get()withUnencryptedCookie(),因此您可以在测试中间件时发挥创意。

$this->middleware(MyMiddleware::class, 'test_argument')
    ->withUnencryptedCookie()
    ->be($this->myTestUser)
    ->post('test/route', ['foo' => 'bar'])
    ->assertSee('John');

表单请求

您可以使用 InteractsWithFormRequests 特性和 formRequest() 方法测试表单请求是否使用不同的数据通过授权和验证。需要 Form 请求类和一个包含要测试的数据的 array,以独立测试。

public function test_form_request()
{
    $this->formRequest(MyFormRequest::class, ['foo' => 'bar'])->assertOk();
}

授权

要检查策略或门控是否工作得当,请使用 InteractsWithAuthorization 特性来检查用户是否可以或不能被授权执行给定操作。

public function test_authorization()
{
    $admin = User::factory()->admin()->create();
    
    $this->assertUserCan($admin, 'viewDashboard');
}

类型转换

InteractsWithCast 特性允许快速测试类型转换是否正确地从属性设置值,并且可以从属性值返回给定值。它还支持同时检查多个属性。

public function test_cast()
{
    $this->cast(MyTestCast::class)
        ->assertCastFrom(null, new Cast)
        ->assertCastTo('{"foo":"bar"}', new Cast(['foo' => 'bar']));
}

Laravel Octane 兼容性

  • 没有使用过时的应用程序实例的单例。
  • 没有使用过时的配置实例的单例。
  • 没有使用过时的请求实例的单例。
  • 没有写入静态属性。

使用此包与 Laravel Octane 不会有任何问题。

安全

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

许可证

此特定包版本根据 MIT 许可证条款授权,发布时生效。

LaravelTaylor Otwell 的商标。版权所有 © 2011-2024 Laravel LLC。