glhd / dawn
Requires
- php: ^8.1
- ext-json: *
- ext-pcntl: *
- ext-sockets: *
- ext-zip: *
- illuminate/support: ^9.0
- nyholm/psr7: ^1.5
- php-webdriver/webdriver: ^1.12
- react/http: ^1.7
- symfony/psr-http-message-bridge: ^2.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- laravel/sanctum: ^3.0
- mockery/mockery: ^1.3
- nunomaduro/collision: ^6.1
- orchestra/testbench: ^7.0
- phpunit/phpunit: ^9.5
- spatie/laravel-ignition: ^1.0
This package is auto-updated.
Last update: 2024-08-29 23:32:11 UTC
README
Dawn
Dawn 是一个为 Laravel 提供的实验性浏览器测试库。它试图与 Dusk 保持大部分兼容,但有一些不同的权衡1。Dawn 的主要优点是它允许您以编写所有其他功能测试(数据库事务、模拟、自定义测试路由等)相同的方式编写浏览器测试。这通常意味着它们运行更快,并且受到的限制更少。
警告 这是一个非常早期的版本。已经考虑了一些边缘情况。许多边缘情况尚未考虑。大部分 Dusk API 已经实现,但许多方法和断言尚未实现。
安装
安装 Dawn
您可以通过 Composer 安装 Dawn 的开发版本(您需要 PHP 8.1 和 Laravel 9)
composer require glhd/dawn:dev-main
全局安装 Chrome Driver
您还需要在您的机器上安装 chromedriver。
注意 最终,Dawn 将为您安装一个 chromedriver 的副本,就像 Dusk 一样。当前的实现仅在安装了通过 homebrew 安装的 chromedriver 的 MacOS 上进行了测试。YMMV。
使用
要使用 Dawn,将 RunsBrowserTests
添加到任何测试用例中。然后您可以调用 openBrowser()
以获取一个 Browser
实例以开始测试。
class MyBrowserTest extends TestCase { use RefreshDatabase; use RunsBrowserTests; public function test_can_visit_homepage() { $this->openBrowser() // <-- this is Dawn ->visit('/') ->assertTitleContains('Home'); } }
Dawn API
Dawn 试图有一个与 Laravel Dusk 大部分兼容的 API。并非所有功能或断言都已实现,但就目前而言,您最好使用 Dusk 文档作为参考。
Dawn 与 Dusk 的差异
Dawn 和 Dusk 之间的主要 API 差异是 Dawn 的 API 不需要在回调内部发生浏览器交互。在大多数情况下,这仅仅涉及将 $this->browse()
的调用替换为 $this->openBrowser()
并删除闭包。
-$this->browse(function ($browser) { +$browser = $this->openBrowser(); $browser->visit('/login') -});
某些 Dusk 方法使用 Dawn 的异步 I/O 通道实现较为困难,或者由于序列化约束而无法完全重现(例如,您无法序列化 TCP 连接)。以下是一些此类函数:
login()
、loginAs()
等——在 Dawn 中这些没有意义,因为您可以在测试中直接使用正常的actingAs()
或be()
辅助方法。cookie()
和plainCookie()
——这些最终将实现element()
和elements()
——因为 Dawn 在后台进程中与 WebDriver 实例交互,因此要在主 PHPUnit 进程中直接访问底层RemoteWebElement
实例稍微困难一些。最终将有一个 API 用于访问这些实例,但它可能略有不同。ensurejQueryIsAvailable()
——Dawn 不依赖于 jQuery
Dusk API 兼容性
大部分 Dusk API 已经实现,但并非全部。
缺少的方法(可能不完整)
pressAndWaitFor()
within()
/with()
/elsewhere()
/elsewhereWhenAvailable()
(范围通常尚未实现)onComponent()
(组件尚未实现)
缺少的断言(可能不完整)
assertVueContains()
assertVueDoesNotContain()
assertQueryStringHas()
assertQueryStringMissing()
故障排除
- 我遇到了类似“2 毫秒后无法连接到 localhost 端口 9515:无法连接到服务器”的错误
- 请确保您已安装了 `chromedriver` 和相同版本的 Google Chrome。
常见问题解答
- 它能在 Chris 的 Mac 之外的其他地方运行吗?
- 🤷♂️
- Windows上会工作吗?
- 🤷♂️ 可能吧?
- 我什么时候可以使用这个?
- 幸运总是眷顾勇敢者。
- 这是最终的API吗?
- `RunsBrowserTests` 的大部分内容相当稳定。在1.0版本之前,其底层实现可能会有很多变化。
主要待办事项
- 完成Dusk API的复制
- 全面测试覆盖
- 在Windows上运行自动化测试
- 改进
chromedriver
的安装/配置故事 - 实现拖放功能