anik/testbench-lumen

Lumen 包开发的测试助手

v2.0 2023-03-26 23:24 UTC

This package is auto-updated.

Last update: 2024-08-27 02:24:25 UTC


README

testbench-lumen codecov Total Downloads Latest Stable Version

anik/testbench-lumen 是一个包,高度受 orchestral/testbench 启发。 orchestral/testbench 是一个用于测试 Laravel 包的工具。而 anik/testbench-lumen 仅可用于 Lumen,从 Lumen 6.x 开始以及之后。

安装

composer require --dev anik/testbench-lumen

文档

  • 该包使用 phpunit.xml。在 phpunit.xml 文件中设置您的环境变量。
<phpunit>
    // ...
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
    </php>
</phpunit>

注意:该包 不使用 .env 文件。您必须主要在 phpunit.xml 文件中设置所有变量。

  • 您的测试用例应扩展 \Anik\Testbench\TestCase 类。
  • 您的测试用例将能够访问 Lumen 测试 API

启动

该包内部为测试用例启动 Lumen 应用程序。在启动过程中,您可以添加一些功能。

  • afterApplicationCreated($callback) 注册在应用程序创建后调用的回调。如果在应用程序创建后注册回调,它将立即触发。回调将访问到 Laravel\Lumen\Application 实例。
  • afterApplicationRefreshed($callback) 注册在应用程序刷新后调用的回调。如果在应用程序刷新后注册回调,它将立即触发。回调将访问到 Laravel\Lumen\Application 实例。
  • beforeApplicationDestroyed($callback) 注册在应用程序销毁前调用的回调。将访问到 Laravel\Lumen\Application 实例。
  • afterApplicationDestroyed($callback) 注册在应用程序销毁后调用的回调。将访问到 Laravel\Lumen\Application 实例。

默认情况下,应用程序不会加载 facadeeloquent。如果您需要启用

  • 外观,从 withFacade 方法返回 true。默认:false
  • 实体,从 withEloquent 方法返回 true。默认:false

要加载您所需的服务提供者,您可以从 serviceProviders() 方法返回一个服务提供者数组。默认是 []

<?php

protected function serviceProviders(): array
{
    return [
        // AppServiceProvider::class,
        // FormRequestServiceProvider::class,
        // AmqpServiceProvider::class,
    ];
}

要添加您的中间件,您可以添加全局和路由中间件。

  • 要添加全局中间件,您必须从 globalMiddlewares 方法返回中间件数组。该方法可以访问 Laravel\Lumen\Application 实例。
<?php

protected function globalMiddlewares(Application $app): array
{
    return [
        // CorsMiddleware::class,
        // NewrelicMiddleware::class,
    ];
}
  • 要添加路由中间件,您必须从 routeMiddlewares 返回关联数组中间件。该方法可以访问 Laravel\Lumen\Application 实例。
<?php

protected function routeMiddlewares(Application $app): array
{
    return [
        // 'auth' => Authenticate::class,
        // 'admin' => AdminMiddleware::class,
    ];
}

默认情况下,应用程序可以访问/端点,返回app()->version()作为响应。为了定义用于测试目的的路由,您可以使用routes方法。该方法可以访问Laravel\Lumen\Routing\Router实例。在这个方法中定义路由与在routes/web.phproutes/api.php中编写方法相同。

<?php

protected function routes(Router $router): void
{
    $router->get('test-route', function () {
        return response()->json([
            'error' => false,
            'message' => 'Test route is executed'
        ], 202);
    });
}

如果您不想报告Exception,可以使用dontReportExceptions方法。定义的异常将不会报告。默认为[]

<?php

protected function dontReportExceptions(): array
{
    return [
        // AuthenticationException::class,
    ];
}

如果需要在注册服务提供者之前与$app实例一起工作,那么应该考虑使用beforeServiceProviders方法。它会在每个测试方法中被调用。

protected function beforeServiceProviders(Application $app)
{
    $app['config']->set(['my-package.enabled' => false]);
}

注解

在测试运行期间,考虑了三种类型的注解。所有注解的任务都会同步执行。所有任务都将接收到其参数中的\Laravel\Lumen\Application\Application实例。

  • @pre-service-register - 注解的任务将在注册服务提供者之前运行。可能在在服务提供者注册之前修改配置的值时有用。
  • @post-service-register - 注解的任务将在注册服务提供者之后运行。
  • @setup-before - 注解的任务将在应用程序正确启动后以及运行每个测试用例之前运行。如果您的测试需要在运行之前执行某些操作,例如更改环境值、将某些内容绑定到容器中等,则可以使用注解执行这些操作。只有方法级别的注解会被执行。

查看注解测试类以了解其用法。

<?php

protected function firstCalled(Application $app)
{
    $app->bind('value-should-be-found', function () {
        return 'as-is';
    });
}

protected function secondCalled(Application $app)
{
    $app->bind('value-should-be-found', function () {
        return 'modified';
    });
}

/**
 * @setup-before firstCalled
 * @setup-before secondCalled
 */
public function testMultipleAnnotations()
{
    $this->assertEquals('modified', $this->app->make('value-should-be-found'));
}

public function defineEnvironmentVariables(Application $app)
{
    $app['config']->set(['testbench-lumen.enabled' => true]);
}

/**
 * @pre-service-register defineEnvironmentVariables 
 */
public function testDefineEnvAnnotation()
{
    $this->assertEquals(true, $this->app['config']->get('testbench-lumen.enabled'));
}

示例

所有场景都已通过测试覆盖。您可以将它们用作示例。