glhd/dawn

0.0.2 2022-09-23 22:39 UTC

This package is auto-updated.

Last update: 2024-08-29 23:32:11 UTC


README

Build Status Test Coverage Status Latest Stable Release MIT Licensed Follow @inxilpro on Twitter

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的安装/配置故事
  • 实现拖放功能