orchestra / testbench-dusk
Laravel Dusk 测试辅助工具,用于包的开发
Requires
- php: ^8.2
- composer-runtime-api: ^2.2
- laravel/dusk: ^8.1
- laravel/serializable-closure: ^1.3
- orchestra/dusk-updater: ^2.6
- orchestra/testbench: ^9.4
- orchestra/testbench-core: >=9.4.0 <9.5.0
- php-webdriver/webdriver: ^1.15.1
- symfony/polyfill-php83: ^1.28
Requires (Dev)
- laravel/pint: ^1.17
- laravel/tinker: ^2.9
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5 || ^11.0
- dev-develop
- 9.x-dev
- 9.7.x-dev
- v9.7.1
- v9.7.0
- v9.6.0
- v9.5.0
- v9.4.0
- v9.3.1
- v9.3.0
- v9.2.0
- v9.1.2
- v9.1.1
- v9.1.0
- v9.0.2
- v9.0.1
- v9.0.0
- 8.x-dev
- v8.29.0
- v8.28.0
- v8.27.0
- v8.26.0
- v8.25.1
- v8.25.0
- v8.24.1
- v8.24.0
- v8.23.0
- v8.22.0
- v8.21.1
- v8.21.0
- v8.20.0
- v8.19.1
- v8.19.0
- v8.18.0
- v8.17.0
- v8.16.1
- v8.16.0
- v8.15.0
- v8.14.2
- v8.14.1
- v8.14.0
- v8.13.0
- v8.12.2
- v8.12.1
- v8.12.0
- v8.11.0
- v8.10.0
- v8.9.2
- v8.9.1
- v8.9.0
- v8.8.0
- v8.7.2
- v8.7.1
- v8.7.0
- v8.6.7
- v8.6.6
- v8.6.5
- v8.6.4
- v8.6.3
- v8.6.2
- v8.6.1
- v8.6.0
- v8.5.0
- v8.4.1
- v8.4.0
- v8.3.1
- v8.3.0
- v8.2.0
- v8.1.3
- v8.1.2
- v8.1.1
- v8.1.0
- v8.0.3
- v8.0.2
- v8.0.1
- v8.0.0
- 7.x-dev
- v7.47.0
- v7.46.0
- v7.45.0
- v7.44.0
- v7.43.1
- v7.43.0
- v7.42.0
- v7.41.0
- v7.40.0
- v7.39.1
- v7.39.0
- v7.38.0
- v7.37.0
- v7.36.0
- v7.35.0
- v7.34.0
- v7.33.0
- v7.32.2
- v7.32.1
- v7.32.0
- v7.31.0
- v7.30.1
- v7.30.0
- v7.29.0
- v7.28.0
- v7.27.1
- v7.27.0
- v7.26.1
- v7.26.0
- v7.25.1
- v7.25.0
- v7.24.0
- v7.23.0
- v7.22.1
- v7.22.0
- v7.21.0
- v7.20.0
- v7.19.0
- v7.18.0
- v7.17.0
- v7.16.0
- v7.15.0
- v7.14.1
- v7.14.0
- v7.13.0
- v7.12.1
- v7.12.0
- v7.11.0
- v7.10.2
- v7.10.1
- v7.10.0
- v7.9.0
- v7.8.1
- v7.8.0
- v7.7.1
- v7.7.0
- v7.6.1
- v7.6.0
- v7.5.0
- v7.4.0
- v7.3.0
- v7.2.0
- v7.1.0
- v7.0.2
- v7.0.1
- v7.0.0
- 6.x-dev
- v6.51.0
- v6.50.0
- v6.49.0
- v6.48.0
- v6.47.1
- v6.47.0
- v6.46.0
- v6.45.0
- v6.44.0
- v6.43.1
- v6.43.0
- v6.42.0
- v6.41.0
- v6.40.0
- v6.39.0
- v6.38.0
- v6.37.2
- v6.37.1
- v6.37.0
- v6.36.0
- v6.35.0
- v6.34.0
- v6.33.1
- v6.33.0
- v6.32.1
- v6.32.0
- v6.31.1
- v6.31.0
- v6.30.1
- v6.30.0
- v6.29.0
- v6.28.0
- v6.27.1
- v6.27.0
- v6.26.0
- v6.25.0
- v6.24.1
- v6.24.0
- v6.23.3
- v6.23.2
- v6.23.1
- v6.23.0
- v6.22.2
- v6.22.1
- v6.22.0
- v6.21.1
- v6.21.0
- v6.20.1
- v6.20.0
- v6.19.0
- v6.18.0
- v6.17.2
- v6.17.1
- v6.17.0
- v6.16.0
- v6.15.1
- v6.15.0
- v6.14.0
- v6.13.1
- v6.13.0
- v6.12.1
- v6.12.0
- v6.11.0
- v6.10.0
- v6.9.0
- v6.8.0
- v6.7.1
- v6.7.0
- v6.6.0
- v6.5.0
- v6.4.0
- v6.3.0
- v6.2.1
- v6.2.0
- v6.1.0
- v6.0.0
- 5.x-dev
- v5.17.0
- v5.16.0
- v5.15.0
- v5.14.1
- v5.14.0
- v5.13.0
- v5.12.0
- v5.11.0
- v5.10.0
- v5.9.0
- v5.8.0
- v5.7.0
- v5.6.0
- v5.5.0
- v5.4.1
- v5.4.0
- v5.3.0
- v5.2.0
- v5.1.3
- v5.1.2
- v5.1.1
- v5.1.0
- v5.0.2
- v5.0.1
- v5.0.0
- 4.x-dev
- v4.17.0
- v4.16.0
- v4.15.0
- v4.14.0
- v4.13.0
- v4.12.0
- v4.11.0
- v4.10.0
- v4.9.0
- v4.8.1
- v4.8.0
- v4.7.0
- v4.6.0
- v4.5.0
- v4.4.1
- v4.4.0
- v4.3.0
- v4.2.0
- v4.1.0
- v4.0.2
- v4.0.1
- v4.0.0
- 3.9.x-dev
- v3.9.7
- v3.9.6
- v3.9.5
- v3.9.4
- v3.9.3
- v3.9.2
- v3.9.1
- v3.9.0
- 3.8.x-dev
- v3.8.4
- v3.8.3
- v3.8.2
- v3.8.1
- v3.8.0
- 3.7.x-dev
- v3.7.4
- v3.7.3
- v3.7.2
- v3.7.1
- v3.7.0
- 3.6.x-dev
- v3.6.4
- v3.6.3
- v3.6.2
- v3.6.1
- v3.6.0
- 3.5.x-dev
- v3.5.7
- v3.5.6
- v3.5.5
- v3.5.4
- v3.5.3
- v3.5.2
- v3.5.1
- v3.5.0
- 3.4.x-dev
- v3.4.6
- v3.4.5
- v3.4.4
- v3.4.3
- v3.4.2
- v3.4.1
- v3.4.0
- dev-9/php84
- dev-8/pest
This package is auto-updated.
Last update: 2024-09-18 03:41:26 UTC
README
Testbench Dusk 组件是一个简单的包,旨在帮助您使用 Laravel Dusk 为 Laravel 包编写测试。
该包由 Konsulting Ltd 开发,并转移到 Orchestra 命名空间,我们将协助支持它。它处于早期开发阶段,欢迎提供反馈。
版本兼容性
入门
在阅读以下文档之前,请花一些时间阅读以下文档
安装
要通过 composer 安装,请在终端中运行以下命令
composer require --dev "orchestra/testbench-dusk"
用法
要使用 Testbench Dusk 组件,您只需要扩展 Orchestra\Testbench\Dusk\TestCase
而不是 Laravel\Dusk\TestCase
。由 Orchestra\Testbench\Dusk\TestCase
启动的 fixture 应用程序默认设置为遵循 Laravel 7 的基本应用程序骨架。
<?php class BrowserTestCase extends Orchestra\Testbench\Dusk\TestCase { // }
自定义主机和端口
默认情况下,Testbench Dusk 将在 http://127.0.0.1:8001
启动其自己的 PHP 服务器。
您可以通过替换 $baseServeHost
和 $baseServePort
来自定义此设置,如下所示
<?php class BrowserTestCase extends Orchestra\Testbench\Dusk\TestCase { protected static $baseServeHost = '127.0.0.1'; protected static $baseServePort = 9000; }
带或不带 UI 运行
Dusk 3.5+ 提供了在无 UI(浏览器窗口)的情况下运行 Dusk 测试的能力,这是默认设置,通常稍微快一些。
您可以通过以下调用切换行为
// To show the UI during testing \Orchestra\Testbench\Dusk\Options::withUI(); // To hide the UI during testing \Orchestra\Testbench\Dusk\Options::withoutUI();
我们建议您将其放在一个 tests/bootstrap.php
文件中,类似于此包自己的测试设置,并用于 PHP 单元测试。
数据库
默认情况下,您可以使用 sqlite
、mysql
、pgsql
或 sqlsrv
与 Testbench Dusk 一起使用,但是请注意,无法像在 Testbench 或 Testbench BrowserKit 中那样使用 sqlite
的 :memory:
数据库。
如果您选择使用 sqlite
,您可能希望使用 phpunit
配置或在 getEnvironmentSetUp()
方法上设置默认数据库连接为 sqlite
。
/** * Define environment setup. * * @param Illuminate\Foundation\Application $app * * @return void */ protected function defineEnvironment($app) { $this->app['config']->set('database.default', 'sqlite'); }
注意:与 Laravel 文档相反,您不应使用
Illuminate\Foundation\Testing\DatabaseMigrations
特性,因为 testbench-dusk 会自行处理回滚
要创建 sqlite 数据库,只需运行以下代码
php vendor/orchestra/testbench-dusk/create-sqlite-db
高级用法
自定义测试期间使用的 Laravel App 实例
我们使用调用测试类来构建用于服务请求的应用程序。
有时您可能需要为单个测试对应用程序进行一些小的修改(例如,更改配置项)。
通过在测试中使用 tweakApplication
方法并传递一个闭包来应用,可以实现这一点。在测试结束时,您需要调用 removeApplicationTweaks
方法以停止更改应用于服务器。
一个示例测试(can_tweak_the_application_within_a_test
)在 tests/Browser/RouteTest.php
测试文件中可用。
选择性运行 Dusk 测试
浏览器测试可能需要一段时间才能运行,因此您也可以在 phpunit.xml
文件中将您的测试分开,通过提供不同的测试套件,允许您按需运行浏览器测试。
例如
<testsuites> <testsuite name="Browser"> <directory suffix="Test.php">./tests/Browser</directory> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Feature</directory> </testsuite> <testsuite name="Unit"> <directory suffix="Test.php">./tests/Unit</directory> </testsuite> </testsuites>
通过运行带有 --testsuite=Browser
选项的 phpunit 来仅运行您的浏览器测试。
您可以选择使用 defaultTestSuite="Unit"
选项设置默认测试套件。
故障排除
Chrome 版本
Facebook\WebDriver\Exception\SessionNotCreatedException: session not created: Chrome version must be between 70 and 73
如果测试报告以下错误,请运行以下命令
./vendor/bin/dusk-updater update
或者您也可以运行以下命令来检测已安装的ChromeDriver并在必要时自动更新它
./vendor/bin/dusk-updater detect --auto-update
在同一个测试套件中运行Dusk和标准测试台测试
当使用loadLaravelMigrations()
并扩展Dusk测试类\Orchestra\Testbench\Dusk\TestCase
的一些测试,而其他测试扩展“正常”测试类\Orchestra\Testbench\TestCase
时,您可能会遇到以下错误:PHP致命错误:无法声明类CreateUsersTable,因为该名称已在...中使用
问题在于,在同一个测试运行中,从两个包的“骨架”中加载了迁移,并且Laravel的迁移类没有命名空间。
解决方案
请确保您的测试套件中的所有集成测试都使用相同的Laravel骨架(来自testbench-dusk
的那个),无论它们扩展的是哪个基类,都可以通过在测试类中覆盖getBasePath()
来实现。在您的基集成测试类中或可能在一个特质中完成这个覆盖,如果您需要在多个类中使用它。
/** * Make sure all integration tests use the same Laravel "skeleton" files. * This avoids duplicate classes during migrations. * * Overrides \Orchestra\Testbench\Dusk\TestCase::getBasePath * and \Orchestra\Testbench\Concerns\CreatesApplication::getBasePath * * @return string */ protected function getBasePath() { // Adjust this path depending on where your override is located. return __DIR__.'/../vendor/orchestra/testbench-dusk/laravel'; }