unicorn / lumen-testbench
Laravel包开发测试辅助工具orchestra/testbench的Lumen分支
Requires
- php: >=7.2
- laravel/framework: ^6.4
- mockery/mockery: ^1.2.3
- orchestra/testbench-core: ^4.3
- phpunit/phpunit: ^8.3
- dev-master
- 4.x-dev
- v4.3.0
- v4.2.0
- v4.1.0
- v4.0.1
- v4.0.0
- 3.9.x-dev
- v3.9.2
- v3.9.1
- v3.9.0
- 3.8.x-dev
- v3.8.5
- v3.8.4
- v3.8.3
- v3.8.2
- v3.8.1
- v3.8.0
- 3.7.x-dev
- v3.7.7
- v3.7.6
- v3.7.5
- v3.7.4
- v3.7.3
- v3.7.2
- v3.7.1
- v3.7.0
- 3.6.x-dev
- v3.6.6
- v3.6.5
- v3.6.4
- v3.6.3
- v3.6.2
- v3.6.1
- v3.6.0
- 3.5.x-dev
- v3.5.5
- v3.5.4
- v3.5.3
- v3.5.2
- v3.5.1
- v3.5.0
- 3.4.x-dev
- v3.4.12
- v3.4.11
- v3.4.10
- v3.4.9
- v3.4.8
- v3.4.7
- v3.4.6
- v3.4.5
- v3.4.4
- v3.4.3
- v3.4.2
- v3.4.1
- v3.4.0
- 3.3.x-dev
- v3.3.7
- v3.3.6
- v3.3.5
- v3.3.4
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- 3.2.x-dev
- v3.2.8
- v3.2.7
- v3.2.6
- v3.2.5
- v3.2.4
- v3.2.3
- v3.2.2
- v3.2.1
- v3.2.0
- 3.1.x-dev
- v3.1.10
- v3.1.9
- v3.1.8
- v3.1.7
- v3.1.6
- v3.1.5
- v3.1.4
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.7
- v3.0.6
- v3.0.5
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.2.1
- v2.2.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
This package is auto-updated.
Last update: 2024-09-09 10:30:18 UTC
README
Testbench组件是一个简单的包,旨在帮助您编写Laravel包的测试,尤其是在涉及路由时。
版本兼容性
入门指南
在阅读本说明书的其余部分之前,请花些时间阅读Laravel官方文档中的包开发部分,如果您还没有做的话。
安装
通过Composer安装,请在终端运行以下命令
composer require --dev "orchestra/testbench"
使用
要使用Testbench组件,您只需扩展Orchestra\Testbench\TestCase
而不是PHPUnit\Framework\TestCase
。由Orchestra\Testbench\TestCase
启动的app
脚本是预定义的,遵循Laravel 6的基础应用程序结构。
<?php class TestCase extends Orchestra\Testbench\TestCase { // }
自定义服务提供者
要加载您的包服务提供者,请覆盖getPackageProviders
。
protected function getPackageProviders($app) { return ['Acme\AcmeServiceProvider']; }
自定义别名
要加载您的包别名,请覆盖getPackageAliases
。
protected function getPackageAliases($app) { return [ 'Acme' => 'Acme\Facade' ]; }
重写setUp()方法
由于Orchestra\Testbench\TestCase
替换了Laravel的Illuminate\Foundation\Testing\TestCase
,如果您需要自己的setUp()
实现,请务必调用parent::setUp()
/** * Setup the test environment. */ protected function setUp() { parent::setUp(); // Your code here }
设置环境
如果您需要在应用程序启动过程中早期添加某些内容(在注册服务提供者和启动服务提供者之间执行),则可以使用getEnvironmentSetUp
方法。
/** * Define environment setup. * * @param \Illuminate\Foundation\Application $app * @return void */ protected function getEnvironmentSetUp($app) { // Setup default database to use sqlite :memory: $app['config']->set('database.default', 'testbench'); $app['config']->set('database.connections.testbench', [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ]); }
使用注解设置环境
Testbench Core 4.4新增功能:使用@environment-setup
注解自定义针对每个测试的getEnvironmentSetUp
的使用。
protected function useMySqlConnection($app) { $app->config->set('database.default', 'mysql'); } protected function useSqliteConnection($app) { $app->config->set('database.default', 'sqlite'); } /** * @environment-setup useMySqlConnection */ public function testItCanBeConnectedWithMySql() { // write your tests } /** * @environment-setup useSqliteConnection */ public function testItCanBeConnectedWithSqlite() { // write your tests }
内存SQLite连接
为了减少设置配置,您可以在getEnvironmentSetUp
下设置或通过在PHPUnit配置文件中定义,使用testing
数据库连接(:memory:
与sqlite
驱动程序)来减少设置。
<phpunit> // ... <php> <env name="DB_CONNECTION" value="testing"/> </php> </phpunit>
重写控制台内核
您可以通过重写resolveApplicationConsoleKernel
方法轻松地交换应用程序启动时的控制台内核。
/** * Resolve application Console Kernel implementation. * * @param \Illuminate\Foundation\Application $app * @return void */ protected function resolveApplicationConsoleKernel($app) { $app->singleton('Illuminate\Contracts\Console\Kernel', 'Acme\Testbench\Console\Kernel'); }
重写HTTP内核
您可以通过重写resolveApplicationHttpKernel
方法轻松地交换应用程序启动时的HTTP内核。
/** * Resolve application HTTP Kernel implementation. * * @param \Illuminate\Foundation\Application $app * @return void */ protected function resolveApplicationHttpKernel($app) { $app->singleton('Illuminate\Contracts\Http\Kernel', 'Acme\Testbench\Http\Kernel'); }
重写应用程序时区
您也可以轻松地覆盖应用程序默认时区,而不是默认的"UTC"
。
/** * Get application timezone. * * @param \Illuminate\Foundation\Application $app * @return string|null */ protected function getApplicationTimezone($app) { return 'Asia/Kuala_Lumpur'; }
使用迁移
包开发者应使用ServiceProvider::loadMigrationsFrom
功能来自动处理包的迁移。
$this->artisan('migrate', ['--database' => 'testbench'])->run();
使用Laravel迁移
默认情况下,Testbench不会执行默认的Laravel迁移,包括users
和password_resets
表。要运行迁移,只需添加以下命令即可
$this->loadLaravelMigrations();
您还可以通过添加--database
选项来设置特定的数据库连接。
$this->loadLaravelMigrations(['--database' => 'testbench']);
运行测试迁移
要运行仅用于测试目的且不是您包一部分的迁移,请将以下内容添加到您的基测试类中
/** * Setup the test environment. */ protected function setUp() { parent::setUp(); $this->loadMigrationsFrom(__DIR__ . '/database/migrations'); // and other test setup steps you need to perform }
注意事项和考虑事项
- 您的迁移文件必须符合Laravel的约定,例如
0000_00_00_000000_create_package_test_tables.php
。 - 您可以选择将迁移文件夹放在
tests/database/
中。 - 您可以选择更改测试迁移类的名称,使其与发布名称不同,例如从
CreateUsersTable
更改为CreateUsersTestTable
,否则您可能会遇到 Composer 类加载器冲突。
使用模型工厂
Testbench 包含 withFactories()
方法,允许您为测试套件注册自定义模型工厂路径。
$this->withFactories(__DIR__.'/factories');
示例
要查看包括如何设置配置在内的测试工作示例,请检查文件
替代测试
还有扩展 Testbench 的第三方包
故障排除
未找到支持的加密器。密钥和/或密钥长度无效。
RuntimeException: No supported encrypter found. The cipher and / or key length are invalid.
此错误仅会在您的测试套件需要使用加密器时发生。要解决此问题,您可以在 phpunit.xml
中添加一个虚拟的 APP_KEY
或使用特定的密钥到您的应用程序/包。
<phpunit> // ... <php> <env name="APP_KEY" value="AckfSECXIvnK5r28GVIWUAxmbBSjTsmF"/> </php> </phpunit>
为什么 Testbench 不包含任何 App
类。
Testbench 移除所有类的原因是为了确保您在开发 Laravel 包时永远不会依赖于它。例如,App\Http\Controllers\Controller
和 App\User
类很容易添加,但这些问题在于这些类可以是
- 移除,移动到其他位置,如
App\Models\User
,或者 - 使用
php artisan app:name Acme
重命名,这将App\User
重命名为Acme\User
。
类 'GuzzleHttp\Client' 未找到
如果您计划在 Laravel 7 中使用新的 HTTP 客户端,则需要将 guzzlehttp/guzzle
包含在您的包的 composer.json
中。
composer require "guzzlehttp/guzzle=^6.3.1"
我们无法保证
laravel/laravel
中的任何要求始终保持不变。开发者可能会移除任何可选要求,例如guzzlehttp/guzzle
、fideloper/proxy
、fruitcake/laravel-cors
或laravel/tinker
。
在 Laravel 5.4 上测试后缺少浏览器套件支持
将 orchestra/testbench
替换为 orchestra/testbench-browser-kit
,并遵循安装指南。