anik / testbench-lumen
Lumen 包开发的测试助手
Requires
- php: ^7.2|^8.0
- laravel/lumen: ^6.0|^7.0|^8.0|^9.0|^10.0
- mockery/mockery: ^1.3
- phpunit/phpunit: ^8.0|^9.0|^10.0
README
testbench-lumen

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
实例。
默认情况下,应用程序不会加载 facade
和 eloquent
。如果您需要启用
- 外观,从
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.php
或routes/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')); }
示例
所有场景都已通过测试覆盖。您可以将它们用作示例。